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)에서 어떤 값들이 출력될지?