호이스팅 됐지만, ReferenceError 발생 (TDZ 제한)
호이스팅 되고, ReferenceError 발생안함
어디에 선언했는지와 상관없이
선언문이 최상단으로 끌어올려진 것 같은 현상
console.log(Infinite); // undefined
var Infinite = "👐";
console.log(Infinite); // 👐
선언문 전에 출력해도 에러가 나지않고 undefined을 반환한다
선언문을 물리적으로 끌어올린 것이 아니고 환경레코드에 저장해두는 것.
{ Infinite }
{ Infinite : undefined }
{ Infinite : "👐" }
{ Infinite : undefined }
호이스팅 X ?
선언단계에서 실행컨텍스트에 변수 등록은 됐지만, 값이 할당안되서 ReferenceError가 발생하는 것이다.
따라서 호이스팅은 됐지만 참조할 메모리가 없기때문에 접근할 수가 없어서 호이스팅이 안되는 것처럼 보이는 것이다.
선언 단계 / 초기화 단계가 분리되어 있다
초기화단계는 선언문 이후에 이뤄진다. 초기화 전에는 변수를 참조할 수 없어서 참조 에러가 발생한다
이로 인해 일시적 사각지대(TDZ) 문제가 발생한다
{ Infinite } // 할당문 전까진 값을 읽어올 수 없음
// TDZ구역) 선언문 전에 변수를 참조할 수 없음
console.log(Infinite); // Reference Error
// 선언문 - 초기화 단계 실행
const Infinite;
console.log(Infinite); // undefined
// 할당문 - 할당 단계 실행
Infinite = "👐";
console.log(Infinite); // "👐"
호이스팅 안됨?
= 호이스팅은 됐지만, 초기화된 참조값이 없어서 TypeError가 발생한다
foo(); // hello
foo2(); // TypeError: foo2 is not a function
function foo() { // 함수선언문 - 호이스팅 O
console.log("hello");
}
var foo2 = function() { // 함수표현식 - 호이스팅 X
console.log("hello2");
}
호이스팅 됨
[10분 테코톡] 💙 하루의 실행 컨텍스트
[JS] 호이스팅과 TDZ (Temporal Dead Zone) - let도 호이스팅이 된다!