TIL 10번의 글 this에 대하여 쓰기 전에 Execution Context에 대해서 먼저 작성했어야 했는데 순서가 어긋났다. Execution Contect(EC)를 이해하면 this를 이해하는데 있어서 큰 어려움이 없게 된다.
EC {
LEC: {},
VEC: {},
TBC: {}
}
함수와 변수의 식별자 해결을 위한 환경 설정
함수 초기화 단계에서 해석한 함수와 변수를 {name: value}
로 저장. 이를 통해 이름으로 함수와 변수를 검색할 수 있게 됨
함수 밖의 함수와 변수 참조 환경 설정
함수 밖의 함수와 변수를 사용할 수 있게 됨
VEC
에 담기는 내용은 LEC
와 같지만 최초의 Snapshot을 유지한다는 점의 차이가 있다. LEC
를 생성할 때 VEC
의 정보를 먼저 담은 다음, 이것을 그대로 복사해서 LEC
를 만들고, 이후에는 LEC
를 주로 활용한다.this
로 함수를 호출한 object의 property에 access (this.프로퍼티 이름
)const obj = { point: 100};
obj.getPoint = function( {
return this.point;
}
obj.getPoint();
EC: {
LEC: {
ER: {
DER: {},
OER: {}
}
},
VEC: {},
TBC: {
point: 100,
getPoint: function(){}
}
}
this.point
실행LEC
안에 환경 레코드(ER)을 구분하는 이유는 컨텍스트를 구성하는 대상에 따라 다르기 때문이다.
EC: {
LEC: {
ER: {
DER: {},
OER: {}
},
OLER: {},
},
VEC: {},
TBC: {}
}
function book(){
function get(){
return point;
}
const point = 123;
return get();
};
book();
EC: {
LEC: {
ER: {
DER: {
get: function,
point: undefined
},
OER: {}
},
OLER: {}
},
VEC: {},
TBC: {}
}
EC: {
LEC: {
ER: {
DER: {},
OER: {}
}
OLER: {
point: 123;
}
},
VEC: {},
TBC: {}
}
확실히 엔진 작동 원리를 알면 더 이해가 되는 거 같아요