-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
실행 콘텍스트 실행과정 정리
21.04.08 00:02 작성 조회수 109
3
function book(){
function get() {
return point;
};
var point = 123;
return get();
};
console.log(book());
1. function 키워드를 만나게 되고 book 오브젝트 생성
2. [[scope]]에 글로벌 오브젝트 설정
3. 변수 확인, 해당사항 없음
4. book() 으로 함수를 호출하면 엔진은 실행 콘텍스트를 생성하고, 실행 콘텍스트 안으로 이동합니다.
준비 단계 - 환경조성
5. 컴포넌트(LEC, VEC, TBC)를 생성하여 실행 콘텍스트에 첨부
6. 환경레코드(ER)를 생성하여 LEC에 첨부
- 함수 안의 함수, 변수를 환경레코드에 바인딩
7. 외부 렉시컬 환경 참조(OLER)를 생성하고 렉시컬 환경 컴포넌트 내 첨부
8. 글로벌 오브젝트의 [[scope]] 를 외부 렉시컬 환경 참조에 설정(참조)
실행 콘텍스트(EC): {
렉시컬 환경 컴포넌트(LEC) = {
환경레코드(ER) : {
get : function 오브젝트,
point: undefined;
},
외부 렉시컬 환경 참조(OLER) : {}
},
변수 환경 컴포넌트(VEC) : {},
this 바인딩 컴포넌트(TBC) : {}
}
9. function 키워드를 만나게 되고 get function 오브젝트 생성
10. [[Scope]]에 get 스코프를 설정한다.
11. point 변수에 123 값이 할당 된다.
12. get() 으로 함수를 호출하면 엔진은 실행 콘텍스트를 생성하고, 실행 콘텍스트 안으로 이동합니다.
실행 콘텍스트(EC): {
렉시컬 환경 컴포넌트(LEC) = {
환경레코드(ER) : {},
외부 렉시컬 환경 참조(OLER) : {
point : 123
}
},
변수 환경 컴포넌트(VEC) : {},
this 바인딩 컴포넌트(TBC) : {}
}
13. 환경 레코드에서 먼저 찾고 없으면 외부 렉시컬 환경 참조에서 point를 찾습니다.
실행단계
14. 함수 내 코드 실행하여 point 값을 return 합니다.
제대로 이해한게 맞는가요?..
답변을 작성해보세요.
2
김영보
지식공유자2021.04.08
예, 좋습니다. 깨끗합니다.
정리하는 차원에서 조금 더 복잡한 시나리오를 작성하고, 코드를 작성한 후, 위에 작성한 대로 프로그램이 흘러가는지 검증해보세요. 엔진 내부 처리이지만 내가 엔진이라고 생각하고 정리하면, 완전하게 내 것이 될 것입니다.
0
답변 2