• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

스코프 질문

22.04.19 17:55 작성 조회수 109

0

예를들어 function book() {} 이 존재한다고 가정했을때 어떤 순서로 스코프가 등록되고 레코드에 반영되는지 혼란스러워서 질문남깁니다.

 

1. 엔진이 function book을 만난다.

2. function 오브젝트를 생성한다.

3. function 오브젝트에 [[scope]] 를 등록한다.

4. 선언적 레코드에 { book: function(){} } 을 등록한다.

or 

1.엔진이 function book을 만난다.

2. function 오브젝트를 생성한다.

3. 선언적 레코드에 { book: function(){} } 을 등록한다.

4. function 오브젝트에 [[scope]] 를 등록한다.

 

둘 중 어느것이 맞는 순서일까요?

답변 1

답변을 작성해보세요.

0

ms님의 프로필

ms

2022.08.25

  1. 엔진이 function book을 만난다.

  2. function 오브젝트를 생성해서 book 변수에 할당한다

  3. 생성된 function 오브젝트의 내부 프로퍼티인 [[scope]] 에 book 함수가 속한 (함수밖)의 스코프를 바인딩한다

  4. book 함수를 호출한다

  5. book 함수에 실행 컨텍스트 객체를 생성해 첨부한다

  6. 생성된 실행 컨텍스트에 렉시컬 환경 컴포넌트, 변수 환경 컴포넌트, this 바인딩 컴포넌트를 생성해 첨부한다

  7. 렉시컬 환경 컴포넌트에 환경 레코드를 생성해서 첨부한다

  8. 렉시컬 환경 컴포넌트에 외부 렉시컬 환경 참조를 생성해서 참부한다

  9. 외부 렉시컬 환경 참조에는 book function 의 [[scope]] 값이 반인딩 된다.

  10. 환경 레코드(선언전 환경 레코드)에 book 함수 안의 변수와 함수가 설정된다