environmentRecord와 호이스팅

environmentRecord에는 현재 컨텍스트와 관련된 코드의 식별자 정보들이 저장됨

위의 변수 정보 수집하는 과정을 모두 마쳐도, 아직 실행 컨텍스트가 관여할 코드들은 ‘실행되기 전’의 상태

<aside> 📌 자바스크립트 엔진은 식별자들을 최상단으로 끌어올려놓은 다음 실제 코드를 실행한다 (엔진의 실제 동작 방식은 위와 다름)

</aside>

여기서 등장하는 ‘호이스팅(hoisting)’ 개념

호이스팅 규칙

environmentRecord에는 매개변수의 이름, 함수 선언, 변수명 등이 담긴다.

매개변수와 변수에 대한 호이스팅(1)- 원본 코드

function a (x) {  // 수집 대상 1(매개변수)
	console.log(x); // (1)
	var x;          // 수집 대상 2(변수 선언)
	console.log(x); // (2)
	var x = 2;      // 수집 대상 3(변수 선언)
	console.log(x); // (3)
}
a(1)

호이스팅이 되지 않았을 때 (1), (2), (3)에서 어떤 값들이 출력될지?