인프런 커뮤니티 질문&답변

김나연님의 프로필 이미지
김나연

작성한 질문수

자바스크립트 중고급: 엔진 핵심

3. 실행 콘텍스트 실행 과정, [정리 시간]

정리 시간

해결된 질문

작성

·

129

1

function book(){
    function get() {
        return point;
    };
    var point = 123;
    return get();
};
console.log(book());

1. function 키워드를 만나 function 오브젝트를 생성하고 [[Scope]] 를 글로벌 스코프로 설정한다.

2. book() 함수가 호출되어 book() 함수 안으로 들어간다.

3. 실행 컨텍스트를 생성한다.

    - 위에서 글로벌 스코프로 설정 해둔 [[Scope]]를 외부 렉시컬 환경 참조에 설정한다.

    - 환경 레코드에 {get : function 오브젝트}, {point:undefined} 로 설정한다.

4. function 키워드에 의해 get function 오브젝트가 생성되고 [[Scope]]에 book 스코프를 설정한다.

5. point 변수에 123 값이 할당 된다.

5. get() 함수가 호출되어 get()으로 들어간다.

    - 새로운 실행 컨텍스트가 생성된다.

    - 새로운 실행 컨텍스트의 환경 레코드에서 먼저 찾고 없으면 외부 렉시컬 환경 참조에서 point를 찾는다.

    - 외부 렉시컬 환경 참조에서 point로 값을 찾고 이것을 리턴한다.

저는 이렇게 이해했는데 제가 이해한게 맞을까요?

답변 2

1

김나연님의 프로필 이미지
김나연
질문자

넵! 꽤 복잡한 내용인데 좋은 강의 덕분에 이해가 잘되는 거 같아요! 감사합니다~

0

김영보님의 프로필 이미지
김영보
지식공유자

예, 맞습니다. 1번, 설정이 반대입니다. [[scope]]에.  2번, 호출되면 먼저 만들고 들어갑니다. 3번 글로벌 스코프를. 4번, book 스코프가 아니라 get의 스코프입니다. 

김나연님의 프로필 이미지
김나연

작성한 질문수

질문하기