04.4. 변수 선언의 실행 시점과 호이스팅
앞서 식별자에 대해서 배웠습니다. 배운 내용을 회고하자면, 변수는 값을 저장하기 위해 메모리 공간을 확보하는 것을 말합니다.
변수 선언의 실행 시점과 호이스팅
변수 선언문보다 변수를 참조하는 코드가 앞에 있다. 자바스크립트 코드는 인터프리터에 의해 한 줄 씩 순차적으로 실행되므로, console.log(score);
가 가장 먼저 실행되고 순차적으로 다음 줄에 있는 코드를 실행한다. 따라서, console.log(score);
가 실행되는 시점에는 아직 score
변수의 선언이 실행되지 않았으므로 참조 에러(Reference Error)
가 발생할 것처럼 보이지만, 참조 에러가 발생하지 않고 undefined
가 출력된다.
그 이유는, 변수 선언이 소스코드가 한 줄씩 순차적으로 실행되는 시점. 즉 런타임이 아니라, 그 이전 단계에서 먼저 실행이 되기 때문이다. 자바스크립트 엔진은 소스코드를 한 줄씩 순차적으로 실행하기 전에 먼저, 소스코드의 평가 과정
을 거쳐서 소스코드
를 실행학디 위한 준비를 한다. 이 떄, 소스코드 실행을 위한 준비 단계인 소스코드의 평가 과정에서 자바스크립트 엔진은 변수 선언을 포함한 모든 선언문(변수 선언문, 함수 선언문 등)을 소스코드에서 찾아내 먼저 실행한다.
그리고 소스코드의 평가 과정이 끝나면 비로소 변수 선언을 포함한 모든 선언문을 제외하고 소스코드를 한 줄씩 순차적으로 실행한다.
Key Point💡 자바스크르립트 엔진은 변수 선언이 소스코드의 어디에 있는 상관없이 다른 코드보다 먼저 실행한다.
따라서, 변수 선언이 소스코드의 어디에 위치하는지와 상관없이 어디서든지 변수를 참조할 수 있다.
변수 호이스팅이란?
변수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징을 변수 호이스팅이라 한다.
Key Point💡 변수 선언뿐 아니라
var
,let
,const
,function
,function*
,class
등 키워드를 사용해서 선언하는 모든 **식별자(변수, 함수, 클래스 등)**는 호이스팅이 된다.
모든 선언문은 런타임 이전 단계에서 먼저 실행되기 떄문이다.
요약
변수 선언문이 선두로 끌어 올려진 것을 호이스팅이라 한다.
var 키워드의 변수 선언보다 참조 코드가 먼저 실행되어도
참조에러
가 아닌,undefined
가 출력이 된다.
Last updated