Javascript 호이스팅에 대한 설명을 듣던 중 var, const, let으로 선언한 변수에 대한 차이를 배웠다. const, let은 선언전에 사용하면 ReferenceError가 발생하는데 그럼 호이스팅이 되지 않는걸까?
스코프 내부 어디서든 변수 선언은 최상위에 선언된것처럼 동작한다
Temporal Dead Zone(= 일시적 사각지대)
let age = 20;
function showAge() {
console.log(age);
let age = 30;
}
showAge();
호이스팅은 스코프 단위로 일어나며, showAge 함수에서도 호이스팅이 일어났기 때문에 밖에서 선언한 age=20을 읽지 못한 것이다
변수가 정의된 영역
함수 스코프
const age = 20;
if (age > 19) {
var type = "성인";
}
console.log(type); // 성인
function add(num1, num2) {
var result = num1 + num2;
}
add(2, 3);
console.log(result); // ReferenceError
블록 스코프
var로 선언된 전역 변수는 전역 객체의 프로퍼티로 존재함
var x = 2
=== globalThis.x = 2
let, const는 호이스팅이 된다.
다만, TDZ에 만들어지고 이는 초기화전에는 사용이 금지되어 있다는 규칙에 의해서 사용할 수 없는 것이다.(ReferenceError)
| 참고 영상