← 질문 목록
#242깊이 0
호이스팅으로 인한 부작용을 어떻게 막는가?
let과 const를 사용하고 선언부를 최상단으로 올린다. var로 선언한 변수는 선언과 동시에 undefined로 초기화되어 논리적 오류를 유발하기 때문이다.
| 기준 | var | let/const |
|---|---|---|
| 초기화 시점 | 선언과 동시에 | 할당 전 접근 불가 |
| 스코프 | 함수 단위 | 블록 단위 |
var는 선언문이 스코프 최상단으로 끌어올려져 변수 이름만 예약된다. 하지만 값은 할당문 단계에서 결정된다. 이 틈에 접근하면 undefined가 나온다.
반면 let과 const는 선언 전 접근 시 TDZ(Temporal Dead Zone)에 빠진다. 런타임 에러를 발생시켜 개발자가 잘못된 접근을 즉시 알게 한다.
함수 선언문은 호이스팅되어 선언 전 호출이 가능하다. 하지만 의도치 않은 함수 덮어쓰기가 발생할 수 있어 함수 표현식을 권장한다.