let, const 변수에 접근할 수 없는 시기
즉, 변수가 선언되기 전에 접근하면 오류가 발생하는 구간
발생 이유
자바스크립트에서 변수는 호이스팅 되지만, let과 const 키워드는 초기화되지 않은 상태로 존재하기 때문에 선언 전에 접근하면 오류 발생
console.log(myVar); // ❌ ReferenceError: Cannot access 'myVar' before initialization
let myVar = 10;
JavaScript
복사
myVar 변수는 호이스팅되어(메모리 상에 등록) 코드 상으로는 상단에 존재하긴 하지만, 값이 할당되지는 않은 상태라서 ReferenceError가 발생하는 겁니다.
동작 방식
let 또는 const 키워드로 선언된 변수는, 실행되기 전까지 TDZ 상태에 있습니다.
// 함수 선언
function example() {
console.log(a); // ❌ ReferenceError
let a = 5;
console.log(a); // ✅ 5
}
// 함수 호출
example();
JavaScript
복사
1.
평가 시점 : 자바스크립트가 코드를 실행하기 전, let a를 호이스팅
2.
console.log(a)에서 a에 접근하려고 하지만, 아직 초기화 이전 → TDZ 상태 → ReferenceError
3.
a에 5가 할당되면서 초기화됨
4.
이후 console.log(a)는 정상적으로 출력
var와 let/const의 차이
변수 키워드 | 호이스팅(선언) | 초기화 시점 | TDZ 발생 여부 |
var | |||
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
JavaScript
복사
