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