호이스팅?
- 선언을 현재 스크립트 혹은 함수의 맨 위로 이동시키는 JavaScript의 기본 동작
- JavaScript에서 변수는 사용된 후 선언 가능
Example1
console.log(y);
var y = 1;
console.log(y);
Example2
x = 5;
console.log(x);
var x;
Example3
var x;
x = 5;
console.log(x);
let, const 는?
- let, const 로 선언된 변수 역시 호이스트가 되지만 초기화가 안됨
- 코드 블럭이 변수를 알고 있느나 선언되기 전까지는 사용할 수 없음
- 선언되기 전까지는 사용할 수 없음 => 해당 코드 이후 부분은 실행이 안됨
- let을 사용한 변수는 블록의 시작부터 선언되기 전까지 temporal dead zone 에 있는 상태
Example1 - let
Uncaught ReferenceError
: Cannot access 'carName' before initialization
at xxx.html
console.log("Lucid");
carName = "Tesla";
let carName;
Example2 - const
Uncaught SyntaxError
: Missing initializer in const declaration
- 문법 에러 발생, 코드 자체가 실행이 안됨
console.log("Lucid");
carName = "Tesla";
const carName;
선언은 호이스트 O
초기화는 호이스트 X
Example1
var x = 1;
var y = 2;
console.log(x);
console.log(y);
Example2
var x = 1;
console.log(x);
console.log(y);
var y = 2;
Example3
var x = 1;
var y;
console.log(x);
console.log(y);
y = 2;
[참조]
W3C JavaScript Hoisting