강의

멘토링

커뮤니티

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

띵호님의 프로필 이미지
띵호

작성한 질문수

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

4. 스코프 바인딩, 정적/동적 바인딩, 바인딩 시점의 중요성

스코프 질문

작성

·

234

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

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

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

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

  4. book 함수를 호출한다

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

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

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

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

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

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

띵호님의 프로필 이미지
띵호

작성한 질문수

질문하기