let과 const를 사용하면 코드의 단계별 실행에서 선언이 처리될 때까지 변수를 사용할 수 없다.
function boringOldLinearTime() { answer = 42; // ReferenceError: 'answer' is not defined console.log(answer); let answer; } boringOldLinearTime();
겉보기에는 let 선언은 var 선언처럼 함수의 맨 위로 올라가지 않는다. 하지만 이것은 흔히들 하는 오해다. let과 const도 호이스팅된다. 단지 다르게 호이스팅될 뿐이다.
코드가 포함 범위의 answer에 할당하려고 시도했을 수 있다는 사실을 고려하자. 해당 시나리오를 살펴보겠다.
let answer; // 외부 'answer' function hoisting() { answer = 42; // ReferenceError: 'answer' is not defined console.log(answer); let answer; // 내부 'answer' } hoisting();
마지막에 내부의 let answer까지 answer가 존재하지 않는다면, 함수의 시작 부분에서 answer = 42; 라인이 외부 answer에 할당되어야 하지 않는가?