console.log(x); // undefined (var 호이스팅)
var x = 10; //선언 + undefined로 초기화
console.log(y); // ReferenceError: y is not defined
(let 호이스팅은 변수를 선언하지만 초기화하지 않음)
let y = 20; // 초기화 위치 그전 y 는 tdz에 위치한다.
console.log(z); // ReferenceError: z is not defined (const도 let과 동일)
const z = 30;
tdz에 있는 변수 사용시 ReferenceError 발생.
let a = 10; // 전역변수 a선언
if(true){
console.log(a); // 10
}
선언 초기화 할당이 되면서 전역변수가 참조된다
let a = 10; // 전역변수 a선언
if(true){
console.log(a); // ReferenceError: a is not defined
let a = 20; // 지역변수 a 선언
}
지역변수 a 선언되며 tdz에 위치하고 ReferenceError를 보낸다.
지역변수가 전역변수보다 우선 순위를 갖기 때문에 전역변수가 있어도 블록스콥 안에 있는 a 가 먼저 참조된다.