더북(TheBook)

3.6.1 블록 내 함수 선언: 표준 의미론

가장 간단한 처리는 표준 시맨틱으로, 웹 브라우저에서도 항상 엄격 모드로 적용된다. 실수로 레거시 의미 체계에 의존하는 코드를 작성하지 않으려면 엄격 모드를 사용하는 것이 좋다. 표준 의미 체계를 사용하면 함수 선언이 let 변수에 할당된 함수 표현식으로 효과적으로 변환되고(따라서 해당 변수가 속한 블록으로 범위가 지정됨), 블록 맨 위에 올라간다. 이전의 branching 함수를 가져와서 호이스팅을 확인하기 위해 로깅을 조금 더 추가해 보겠다.

"use strict";
function branching(num) {
    console.log(num);
    if (num < 0.5) {
        console.log("true branch, typeof doSomething = " + typeof doSomething);
        function doSomething() {
            console.log("true");
        }
    } else {
        console.log("false branch, typeof doSomething = " + typeof doSomething);
        function doSomething() {
            console.log("false");
        }
    }
    doSomething();
}
branching(Math.random());
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.