■ 프로그래밍/JavaScript

Temporal Dead Zone

hi_mj 2020. 4. 16. 19:16

Temporal Dead Zone(TDZ)란 '일시적 사각지대'란 의미로 변수의 스코프와 관련있다. 

 

자바스크립트는 ES6에서 도입된 let, const를 포함한 모든 선언을 호이스팅한다. 

호이스팅은 var선언문이나 function선언문 등을 유효 범위의 최상단으로 끌어올리는 것을 말한다. (2020/02/29 - 호이스팅 - 변수, 함수)

 

하지만 var로 선언된 변수와 달리 let으로 선언된 변수는 선언문 이전에 참조하면 에러가 발생한다. 

console.log(name); // output: undefined
var name = "KMJ";

console.log(today); // output: Uncaught ReferenceError: today is not defined
let today = "4월 16일";

 

let은 var와 거의 비슷하지만, let과 const은 블록 스코프이고, var는 함수 스코프라 그렇다. 

if (true) {
    var name = "kmj";
    console.log(name); // output: kmj
}
console.log(name) // output: kmj


if (true) {
    let today = "4월 16일"
    console.log(today); // output: 4월 16일
}
console.log(today); // output: Uncaught ReferenceError: today is not defined

함수 안에 선언된 let은 함수 밖으로 나오지 못한다. 

함수 밖에서 let으로 선언된 변수명과 함수 안에서 let으로 선언된 변수명이 같더라도 컴퓨터는 이를 다르게 인식한다. 

let today = "4월 14일"
if (true) {
    let today = "4월 16일"
    console.log(today); // output: 4월 16일
}
console.log(today); // output: 4월 14일

 

따라서, let으로 선언된 변수는 스코프의 시작에서 변수의 선언까지 TDZ(일시적 사각지대)에 빠진다.