더북(TheBook)

letconst를 사용하면 코드의 단계별 실행에서 선언이 처리될 때까지 변수를 사용할 수 없다.

function boringOldLinearTime() {
    answer = 42;            // ReferenceError: 'answer' is not defined
    console.log(answer);
    let answer;
}
boringOldLinearTime();

겉보기에는 let 선언은 var 선언처럼 함수의 맨 위로 올라가지 않는다. 하지만 이것은 흔히들 하는 오해다. letconst도 호이스팅된다. 단지 다르게 호이스팅될 뿐이다.

코드가 포함 범위의 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에 할당되어야 하지 않는가?

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.