질문 15 · 실전 면접 답변
호이스팅은 무엇이며 선언마다 결과가 다른 이유는 무엇인가요?
이렇게 답해 보세요 (핵심 답변)
호이스팅은 코드가 실제로 위로 옮겨지는 것이 아니라, JavaScript 엔진이 코드를 실행하기 전에 스코프 안의 선언들을 먼저 등록해 두는 동작을 가리킵니다. 선언 방식마다 초기화 시점이 다르기 때문에 선언문 앞에서 접근했을 때의 결과도 달라집니다. 함수 선언문은 함수 본문까지 즉시 준비되어 바로 호출할 수 있고, var는 undefined로 초기화되지만, let·const·class는 선언문이 실행될 때까지 초기화되지 않고 TDZ에 머물러 ReferenceError가 발생합니다.
함께 설명하면 좋은 이유 (꼬리질문 대비)
- 변수 이름을 스코프에 등록하는 단계와 실제 대입식을 평가해 값을 넣는 단계는 서로 분리되어 동작합니다.
- 바깥 스코프에 같은 이름의 변수가 있더라도 블록 안쪽에 let 선언이 있으면 블록 시작부터 안쪽 변수의 TDZ가 적용됩니다.
면접에서 자주 하는 실수
let과 const는 호이스팅이 전혀 일어나지 않는다고 설명하기 쉬운데, 실제로는 스코프에 등록되지만 TDZ에 의해 초기화 전 접근이 차단되는 것입니다.
원리와 예제까지 읽기
공식 참고 자료
질문 목록 출처 ↗ · 원본 15번을 바탕으로 질문과 답변을 새로 정리했습니다.