**호이스팅(hoisting)**은 코드가 실행되기 전 컴파일 단계에서 선언을 해당 스코프의 최상단으로 끌어올리는 JavaScript의 동작입니다. 하지만 어떻게 호이스팅되는지는 선언 타입에 따라 다릅니다.
js
.(a);
a = ;
();
() { .(); }
.(b);
b = ;
var: 선언이 호이스팅되어 undefined로 초기화됩니다. 그래서 이른 시점에 읽으면 에러가 아니라 undefined가 나옵니다.function 선언: 완전히 호이스팅됩니다 — 정의 라인보다 앞에서 호출할 수 있습니다.let / const: 호이스팅되지만 초기화되지 않습니다. 블록 시작부터 선언 라인까지 *일시적 사각지대(Temporal Dead Zone, TDZ)*에 머물며, TDZ에서 접근하면 ReferenceError가 발생합니다.const f = () => {})은 이른 시점에 호출할 수 없습니다 — 함수가 아니라 const/var 바인딩만 호이스팅됩니다.호이스팅은 "왜 이게 undefined지?"와 "왜 정의보다 먼저 이 함수를 호출해도 동작하지?"를 설명합니다. let/const의 TDZ는 사실 기능입니다 — 조용한 undefined 버그를 시끄러운 에러로 바꿔, 사용 전에 선언하도록 유도합니다.