자바스크립트 호이스팅, undefined와 ReferenceError는 왜 다를까 빠른 답 호이스팅은 코드 이동이 아니라 실행 전 선언이 먼저 등록되는 과정으로 이해하는 편이 정확하다. var는 선언 시 undefined로 초기화되므로 값 할당 전 접근하면 undefined가 나온다. let과 const는 TDZ 구간이 있어 선언문 이전 접근 시 ReferenceError가 발생한다. 함수 선언문은 먼저 준비되지만 함수 표현식은 변수 규칙을 따라 다른 오류를 만들 수 있다. 목차 호이스팅은 코드가 올라가는 현상이 아니라 선언이 먼저 준비되는 과정이다 흐름으로 보기 실행 전에 일어나는 일: 생성 단계와 실행 단계 실험 환경 준비 한 파일로 비교하는 var, let, const, 함수 선언문, 함수 표현식 콘솔 출력으로 읽는 undefined, ReferenceError, TypeError의 차이 블록 스코프와 TDZ에서 자주 생기는 실수 실무에서 기억할 판단 기준 호이스팅은 코드가 올라가는 현상이 아니라 선언이 먼저 준비되는 과정이다 호이스팅을 "변수와 함수가 위로 끌어올려진다"라고만 외우면 실제 실행 결과를 설명하기 어려워집니다. 자바스크립트 엔진은 코드를 물리적으로 위로 옮기지 않습니다. 대신 현재 스코프에서 어떤 이름이 선언됐는지 먼저 파악하고, 그 이름들을 사용할 준비를 해 둡니다. 그래서 핵심은 "코드가 어디 있나"보다 "이 시점에 그 이름이 어떤 상태인가"입니다. 용어도 하나 바로잡아 두면 좋습니다. function hello() {} 를 흔히 함수 선언식이라고 부르지만, 함수 표현식과 구분하려면 함수 선언문이라고 부르는 편이 더 정확합니다. 이 글에서는 함수 선언문과 함수 표현식을 분리해서 설명합니다. 흐름으로 보기 자바스크립트 엔진은 먼저 소스 코드를 읽고 선언을 수집합니다. 그다음 var , let , const , 함수 선언문을 서로 다른 규칙으로 준비한 뒤, 실제 실...