자바스크립트 호이스팅, 왜 가능할까: 생성 단계와 TDZ까지 한 번에 이해하기 빠른 답 호이스팅은 코드가 이동하는 현상이 아니라 실행 전에 식별자 바인딩이 준비되는 동작입니다. var는 선언 시 undefined로 초기화되지만 let과 const는 초기화 전 구간인 TDZ에 들어갑니다. 함수 선언문은 호출 가능한 상태로 먼저 준비되지만 함수 표현식은 변수 규칙을 따릅니다. 실무에서는 호이스팅에 기대기보다 선언을 먼저 쓰고 const와 블록 스코프를 기본으로 두는 편이 안전합니다. 원문 초안을 현재 기준의 자바스크립트 의미론에 맞게 다듬고 있습니다. 우선 스펙과 런타임 문서를 기준으로 오래된 설명과 현재 설명의 차이를 확인한 뒤, 그 흐름에 맞춰 발행형 Markdown으로 재구성하겠습니다.# 자바스크립트 호이스팅, 왜 가능할까: 실행 컨텍스트 생성과 TDZ로 이해하기 목차 시간 흐름으로 이해하기 흐름으로 보기 호이스팅은 코드가 위로 이동하는 현상일까 현재 기준으로 다시 보는 호이스팅 설명 실행 환경에서 먼저 확인하기 var, let, const, 함수 선언문은 어떻게 준비될까 실행 결과로 보는 값, 상태, 오류의 차이 TDZ에서 자주 헷갈리는 typeof 오래된 설명과 현재 설명이 엇갈리는 지점 시간 흐름으로 이해하기 소스 파싱 선언의 형태와 스코프 구조를 먼저 읽습니다. → 실행 컨텍스트 생성 현재 스코프를 위한 실행 환경이 만들어집니다. → 선언 바인딩 식별자 이름이 환경 레코드에 등록됩니다. → 초기화 구간 선언 종류에 따라 undefined , 함수 객체, 미초기화 상태가 갈립니다. → 코드 실행 실제 할당과 호출이 위에서 아래로 진행됩니다. 흐름으로 보기 흐름 다이어그램 이 순서를 먼저 잡아두면, 왜 어떤 줄은 undefined 를 내보내고 어떤 줄은 ReferenceError 를 던지는지 같은 문맥에서 읽을 수 있습니다. 호이스팅은 “선언이 위로 끌어올려진다”는 비유로 시작해도 되지만, 실제로는 “실행 전에 무엇이 어떤 상태로 ...