본문 바로가기

■ 프로그래밍/JavaScript

Temporal Dead Zone

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(일시적 사각지대)에 빠진다. 

'■ 프로그래밍 > JavaScript' 카테고리의 다른 글

Object (3) - 접근법  (0) 2020.05.05
재귀(Recursion)  (0) 2020.04.25
Object (2) - 중첩객체 접근  (0) 2020.03.26
Object (1) - 접근, 할당  (0) 2020.03.25
isNaN()  (0) 2020.03.25