console.log(a); // undefined
a = 3;
console.log(a); // 3
var a = 1;
console.log(a); // 1
undefined
값을 반환// console.log(a); // ReferenceError: Cannot access 'a' before initialization
a = 3;
console.log(a); // ReferenceError: Cannot access 'a' before initialization
let a = 1;
console.log(a);
// console.log(a); // ReferenceError: Cannot access 'a' before initialization
a = 3;
console.log(a); // ReferenceError: Cannot access 'a' before initialization
const a = 1;
console.log(a);
ReferenceError
가 발생let a = 10;
{
console.log(a); // ReferenceError: Cannot access 'a' before initialization
let a = 20;
}
console.log(a)
에서 a
가 상위 스코프의 a
를 참조하여 10
을 출력해야 됨let a;
가 상위로 끌어 올려졌다는 것을 의미let/const 변수의 경우 var 변수와 다르게 변수의 선언 단계와 초기화 단계 사이에 일시적 사각 지대(TDZ)가 존재하고, TDZ에서 관리 중일 때(let 변수의 선언 또는 const 변수의 선언 및 할당 코드가 나오기 전)에 사용하려 한다면 RferenceError를 발생 시킴