코딩/Javascript

변수2- 변수 선언의 실행시점과 변수 호이스팅

코딩쪼렙 2021. 10. 8. 14:08
728x90
console.log(score);   //undefined
var score              // 변수선언문

변수선언문보다 변수를 참조하는 코드가 앞에 있다.

자바스크립트 코드는 인터프리터에 의해 한 줄씩 순차적으로 실행되므로

첫줄에서 변수를 선언하기 전이기 때문에 참조에러 ReferenceError가 발생할 것처럼 보이지만 undefined가 출력된다.

 

이유는 변수 선언이 소스코드가 한줄씩 실행되는 시점 , 즉 런타임이 아니라

그 이전 단계에서 먼저 실행되기 때문이다.

 

자바스크립트엔진은 소스코드를 한 줄씩 순차적으로 실행하기 앞서 

소스코드의 평가과정을 거치면서 소스코드를 실행하기위한 준비를한다.

준비단계인 소스코드 평가과정에서 자바스크립트 엔진은 모든 선언문(변수선언문, 함수선언문 등)을 소스코드에 찾아서 먼저 실행한다. 

소스코드의 평가과정이 끝나면 비로소 선언문을 제외한 소스코드를 한 줄씩 순차적으로 실행한다.

 

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

 

+ReferenceError는 식별자를 통해 값을 참조하려했지만 자바스크립트 엔진이 등록된 식별자(변수, 함수, 클래스)를 찾을 수 없을 때 발생하는에러