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를 사용하고 있는지에 대한 혼동을 방지한다.