자바스크립트에서 호이스팅은 변수와 함수의 선언이 그 범위의 최상단으로 끌어 올려지는 동작을 의미한다. 이는 코드의 실행 순서에 영향을 미치며, 선언 전에 변수를 참조하거나 함수를 호출할 수 있다.
// var
console.log(name); // undefined
var name = "Laon";
console.log(name); //Laon
// let
console.log(name); // ReferenceError
let name = "Laon";
// function
ImFC();
const ImFC = () => {
..
}
ImFC();
자바스크립트 엔진은 다음과 같은 순서로 코드를 처리한다
1. 함수선언문 해석
2. 변수 초기화
3. 코드실행
var로 선언된 변수는 선언과 동시에 undefined로 초기화된다.
let과 const는 선언만 되며 초기화는 나중에 이루어진다. 이 단계에서 TDZ에 들어간다.
Q. 호이스팅은 무엇인가요?
A. 호이스팅은 변수와 함수를 선언하고 스코프 최상단으로 끌어 올리는 것입니다.
Q. let, const는 호이스팅이 발생 안하나요?
A. var, let, const 모두 호이스팅이 발생합니다. var는 선언과 동시에 undefined가 할당되고 let과 const는 선언만 되고 초기화는 나중에 이루어지며, 이 단계에서 TDZ에 들어갑니다.
Q. TDZ가 뭔가요?
A. TDZ는 선언만 되고 아직 초기화 되지 않는 변수가 머무는 공간입니다. 메모리에 할당은 됬지만 초기화가 이루어지지 않아 ReferenceError가 발생합니다.
Q. TDZ가 왜 필요한가요?
A. TDZ는 변수의 초기화를 보장하여 예기치 않은 참조 오류를 방지하고 코드의 안전성을 높이는 역할을 합니다.
Q. const는 재할당이 불가능한데 왜 호이스팅이 필요한가요?
A. const도 호이스팅이 발생하지만, 선언과 초기화가 동시에 이루어지기 때문에 TDZ를 통해 선언 전에 접근하는 것을 방지합니다. 이러한 점은 코드의 명확성과 예측 가능성을 높여줍니다.