에러 안나게 해주세요

environmentRecord와 호이스팅 본문

language/JavaScript

environmentRecord와 호이스팅

Coom 2021. 1. 25. 17:58

environmentRecord

 

environmentRecord에는 현재 컨텍스트와 관련된 코드의 식별자 정보들이 저장됩니다. 컨텍스트를 구성하는 함수에 지정된 매개변수 식별자, 선언한 함수가 있을 경우 그 함수 자체, var로 선언된 변수의 식별자 등이 식별자에 해당합니다.

컨텍스트 내부 전체를 처음부터 끝까지 쭉 훑어나가며 순서대로 수집합니다.

(VariableEnvironment의 상태이므로 실행 전의 상태)

 

이 과정에서 코드가 실행되기 전임에도 불과하고 자바스크립트 엔진은 이미 해당 환경에 속한 코드의 변수명들을 모두 알게 됩니다. 그렇다면 엔진의 실제 동작 방식 대신에 '자바스크립트 엔진은 식별자들을 최상단으로 끌어 올려놓은 다음 실제 코드를 실행한다'라고 생각하더라도 코드를 해석하는 데는 문제될 것이 없을 것입니다.

여기서 호이스팅(hoisting)이란 개념이 등장합니다.

 


hoisting

호이스팅이란 '끌어올리다'라는 의미의 hoist에 ing를 붙여 만든 동명사로, 변수 정보를 수집하는 과정을 더욱 이해하기 쉬운 방법으로 대체한 가상의 개념입니다.

 

function a (x) {
	console.log(x);
    var x;
    console.log(x);
    var x = 2;
    console.log(x);
}
a(1);

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

 

enviroment Record는 현재 실행될 컨텍스트의 대상 코드 내에 어떤 식별자들이 있는지에만 관심이 있고, 각 식별자에 어떤 값이 할당 될 것인지는 관심이 없습니다. 따라서 변수를 호이스팅할 때 변수명만 끌어올리고 할당 과정은 원래 자리에 그대로 남겨둡니다. environmentRecord의 관심사에 맞춰 수집 대상 1,2,3,을 순서대로 끌어올리고 나면 다음과 같은 형태로 바뀝니다.

 

 

function a () {
	var x;
    var x;
    var x;
    
    x = 1;
    console.log(x);
    console.log(x);
    x = 2;
    console.log(x);
}
a(1);

매개변수와 변수에 대한 호이스팅(2) - 호이스팅을 마친 상태

 

 

 

 

 

 

'language > JavaScript' 카테고리의 다른 글

스코프,스코프체인,outerEnvironmnetReference  (0) 2021.01.26
실행 컨텍스트(execution context)  (0) 2021.01.22