더북(TheBook)

엄격 모드에서 자바스크립트 엔진은 해당 코드를 다음과 같이 처리한다.

"use strict";
function branching(num) {
    console.log(num);
    if (num < 0.5) {
        let doSomething = function doSomething() {
            console.log("true");
        };
        console.log("true branch, typeof doSomething = " + typeof doSomething);
    } else {
        let doSomething = function doSomething() {
            console.log("false");
        };
        console.log("false branch, typeof doSomething = " + typeof doSomething);
    }
    doSomething();
}
branching(Math.random());

각 선언이 console.log 호출 위의 블록 내에서 어떻게 효과적으로 호이스트되었는지 확인하자.

당연히 실행하면 실패한다. 각 블록의 doSomething이 블록 스코프이기 때문에 맨 끝에 있는 doSomething은 함수의 최상위 범위에서 선언된 식별자가 아니기 때문이다. 따라서 위 코드를 코드 3-4와 같이 실행되도록 변경하여 실행해 보자.

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