
JavaScript 호이스팅은 인터프리터가 코드를 실행하기 전에 함수, 변수, 클래스 또는 임포트의 선언문을 해당 범위의 맨 위로 끌어올리는 듯한 현상
const x = 1;
{
console.log(x); // 참조 에러
const x = 2;
}
const x = 2 선언이 호출되지 않으면 콘솔문이 상위 범위에서 x을 읽을 수 있어야 한다.
하지만 const 선언은 정의된 전체 범위를 포함시키므로 콘솔문은 아직 초기화되지 않은 const x = 2 선언에서 x를 대신 읽어 ReferenceError 를 낸다.
{
var x = 1;
}
console.log(x); // 1
선언 전의 접근은 없는데, 이는 var 선언이블록으로 범위가 지정되지 않았기 때문에 상관없다.
let, const, class 는 호이스트되지 않는 것으로 보는 것을 선호
temporal dead zone이 선언 이전의 변수 사용을 엄격하게 금지하고 있기 때문