console.log(a);
var a = 1;
console.log(a);
이 코드를 보면 첫번째 줄에서 선언되지 않은 a를 출력시켰으니 오류가 뜰 것이라고 예상했겠지만,
undefined
1
실은 오류가 뜨지 않고 undefined
가 출력된다.
JavaScript의 특징인데, 이렇게 되는 이유는 js의 호이스팅
이라는 개념 때문이다.
: 인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것
var
변수의 경우 호이스팅 시 undefined
로 변수를 초기화한다. (나중에 할당받게 될 때 값이 입력된다.)let
과 const
변수의 경우 호이스팅 시 변수를 초기화하지 않는다.호이스팅 시 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
도 호이스팅 대상이다. 그러나 호이스팅 시 undefined
로 초기화하지 않는다. 즉, let
은 변수의 초기화를 수행하기 전에 읽는 코드가 먼저 나타나면 오류가 발생한다. (const
도 마찬가지)
console.log(a); //오류!!
let a = 1;