let, const 변수에 접근할 수 없는 시기
즉, 변수가 선언되기 전에 접근하면 오류가 발생하는 구간
자바스크립트에서 변수는 호이스팅 되지만, let과 const 키워드는 초기화되지 않은 상태로 존재하기 때문에 선언 전에 접근하면 오류 발생
console.log(myVar); // ❌ ReferenceError: Cannot access 'myVar' before initialization
let myVar = 10;
myVar 변수는 호이스팅되어(메모리 상에 등록) 코드 상으로는 상단에 존재하긴 하지만, 값이 할당되지는 않은 상태라서 ReferenceError가 발생하는 겁니다.
let 또는 const 키워드로 선언된 변수는, 실행되기 전까지 TDZ 상태에 있습니다.
// 함수 선언
function example() {
console.log(a); // ❌ ReferenceError
let a = 5;
console.log(a); // ✅ 5
}
// 함수 호출
example();
변수 키워드 | 호이스팅(선언) | 초기화 시점 | TDZ 발생 여부 |
---|---|---|---|
var | ✅ | ✅ : undefined로 초기화 | ❌ |
let | ✅ | ❌ | ✅ |
const | ✅ | ❌ | ✅ |
// var의 경우
console.log(myVar); // ✅ undefined
var myVar = 10;
console.log(myVar); // ✅ 10
// let, const의 경우
console.log(myLet); // ❌ ReferenceError
let myLet = 10;
console.log(myLet); // ✅ 10