• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

정리 시간

21.01.26 15:46 작성 조회수 102

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

김나연님의 프로필

김나연

질문자

2021.01.26

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

0

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