**호이스팅(hoisting)**은 코드가 실행되기 전 컴파일 단계에서 선언을 해당 스코프의 최상단으로 끌어올리는 JavaScript의 동작입니다. 하지만 어떻게 호이스팅되는지는 선언 타입에 따라 다릅니다.
js
console.log(a); // undefined — `var a`는 호이스팅되어 undefined로 초기화됨
var a = 1;
foo(); // "works!" — 함수 선언은 완전히 호이스팅됨
function foo() { console.log("works!"); }
console.log(b); // ❌ ReferenceError — 일시적 사각지대(temporal dead zone)
let b = ;
무엇이, 어떻게 호이스팅되는가
왜 중요한가
호이스팅은 "왜 이게 undefined지?"와 "왜 정의보다 먼저 이 함수를 호출해도 동작하지?"를 설명합니다. let/const의 TDZ는 사실 기능입니다 — 조용한 undefined 버그를 시끄러운 에러로 바꿔, 사용 전에 선언하도록 유도합니다.
