[TIL] JavaScript 공부 : 변수 호이스팅

모던 자바스크립트 Deep Dive : 이웅모

자바스크립트 변수 선언의 실행 시점과 변수 호이스팅

js를 공부하다가 매우 신기한 것을 발견하였다. 일반적으로

1
2
3
# python
print(result)
result = 3

위와 같이 선언한다면 result가 선언되지 않은 변수라는 에러가 나올 것이다.
하지만 js에서

1
2
3
// js
console.log(result);
var result;

와 같이 쓰면 undefined가 출력되는 놀라운 일이 일어난다!

결과부터 말하면, 자바스크립트 엔진은 변수 선언이 소스코드의 어디에 있든 상관 없이 다른 코드보다 먼저 실행된다.

이처럼 변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징을 변수 호이스팅(variable hoisting) 이라 한다.

변수 선언뿐 아니라 var, let, const, function, class 키워드를 사용해서 선언하는 모든 식별자는 호이스팅된다. 모든 선언문은 런타임 이전 단계에서 먼저 실행되기 때문이다.