• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

실행 콘텍스트 실행과정 정리

21.04.08 00:02 작성 조회수 102

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

·

답변을 작성해보세요.

2

예, 좋습니다. 깨끗합니다.
정리하는 차원에서 조금 더 복잡한 시나리오를 작성하고, 코드를 작성한 후, 위에 작성한 대로 프로그램이 흘러가는지  검증해보세요. 엔진 내부 처리이지만 내가 엔진이라고 생각하고 정리하면, 완전하게 내 것이 될 것입니다.

0

simoniful님의 프로필

simoniful

질문자

2021.04.08

감사합니다! 더 복잡한 것도 실행 콘텍스트의 맥락을 이해하도록 노력해야겠어요