엄격 모드에서 자바스크립트 엔진은 해당 코드를 다음과 같이 처리한다.
"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와 같이 실행되도록 변경하여 실행해 보자.