[JS] 호이스팅 (hoisting) - var와 let의 차이점

gogori6565·2022년 8월 3일
0

JavaScript

목록 보기
9/10
console.log(a);
var a = 1;
console.log(a);

이 코드를 보면 첫번째 줄에서 선언되지 않은 a를 출력시켰으니 오류가 뜰 것이라고 예상했겠지만,

undefined
1

실은 오류가 뜨지 않고 undefined 가 출력된다.
JavaScript의 특징인데, 이렇게 되는 이유는 js의 호이스팅 이라는 개념 때문이다.


호이스팅(hoisting)

: 인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것

  • var 변수의 경우 호이스팅 시 undefined 로 변수를 초기화한다. (나중에 할당받게 될 때 값이 입력된다.)
  • 반면! letconst 변수의 경우 호이스팅 시 변수를 초기화하지 않는다.

var와 let의 차이

var

호이스팅 시 undefined 으로 변수를 초기화하기 때문에 변수를 먼저 사용하고 그 후에 선언 및 초기화가 나타나면, 사용하는 시점의 변수는 기본 초기화 상태 (undefined) 이다.

console.log(a); //undefined 가 출력됨
var a = 1;

이 외에 var 변수는

console.log(a);
a = 1
var a
var a = 1;
var a = 2;
console.log(a); //2 출력

의 경우도 오류가 뜨지 않고 잘 동작한다.

let

let 도 호이스팅 대상이다. 그러나 호이스팅 시 undefined 로 초기화하지 않는다. 즉, let 은 변수의 초기화를 수행하기 전에 읽는 코드가 먼저 나타나면 오류가 발생한다. (const 도 마찬가지)

console.log(a); //오류!!
let a = 1;
profile
p(´∇`)q

0개의 댓글