더북(TheBook)

TDZ는 함수에 적용되는 것과 마찬가지로 블록에도 적용된다.

function blockExample(str) {
    let p = "prefix";                // 바깥 'p' 선언
    if (str) {
        p = p.toUpperCase();         // ReferenceError: 'p' is not defined
        str = str.toUpperCase();
        let p = str.indexOf("X");    // 내부 'p' 선언
        if (p != -1) {
            str = str.substring(0, p);
        }
    }
    return p + str;
}

블록 내부의 첫 번째 줄에는 p를 사용할 수 없다. 왜냐하면 함수에서 선언되었더라도 p 식별자의 소유권을 갖는 블록 내부에 섀도잉(shadowing) 선언이 있기 때문이다. 따라서 식별자는 let 선언이 실행된 후에만 새로운 내부 p를 참조할 수 있다. 이것은 코드가 어떤 p를 사용하고 있는지에 대한 혼동을 방지한다.

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