[JS] 호이스팅(Hoisting)

김민규·2022년 7월 18일
0

자바스크립트

목록 보기
2/7
post-thumbnail

참고한 페이지
MDN Hoisting

호이스팅?

인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것을 의미합니다.

선언만 호이스팅!

초기화는 호이스팅 대상이 아닙니다. 선언이 없으면, 호이스팅은 일어나지 않죠.

console.log(num); // 호이스팅 X, ReferenceError
num = 5; // 초기화, 호이스팅 대상 아님

다음 예제를 보면 var 변수는 호이스팅 시 undefined로 초기화된다는 것을 알 수 있습니다.

console.log(num); // 호이스팅, undefined 출력
var num; // 선언, 호이스팅 대상
num = 5; // 초기화, 호이스팅 대상 아님

let, const

역시 호이스팅 대상입니다. var와 다른 점은 undefined로 변수를 초기화하지 않는다는 겁니다. 따라서 초기화 수행 전 접근시 에러가 발생합니다.

console.log(name); // ReferenceError
let name = 'Jason';

함수는 어떨까요?

함수

역시 호이스팅 대상입니다. 호이스팅 덕분에 선언보다 먼저 호출이 가능합니다.

hello('Jason');

function hello(name) {
  console.log(`Hello, ${name}!`);
}

앞서 let, const는 호이스팅 대상이지만 초기화 전에 접근시 에러가 난다고 했는데요. 이는 TDZ(Temporal Dead Zone)의 영향을 받기 때문입니다. TDZ는 다음 포스팅에서 계속 이어가겠습니다.

profile
점점 더 좋아지고 있습니다

0개의 댓글