• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

[정리 시간] 작성해보았습니다.

21.05.26 23:09 작성 조회수 133

4

선생님 안녕하세요.

벌써 이번 강의의 마지막 정리시간이네요...항상 감사드립니다.

작성한 내용 다른분들과 공유하고자 글을 올립니당.

1. book function 오브젝트를 생성

2. book 함수가 속한 글로벌 오브젝트를 function 오브젝트의 [[Scope]]에 설정

3. var obj = book(200); 에서 book(200)을 호출

--실행 준비 단계--

4. 실행 콘텍스트를 생성 

5. 3개의 컴포넌트 생성 (렉시컬/변수 환경 컴포넌트, this 바인딩 컴포넌트)

6. book function 오브젝트의 [[Scope]]를 외부 렉시컬 환경 참조에 바인딩

--초기화 및 실행 단계--

7. 파라미터 이름인 bookParam에 200을 매핑하여 선언적 환경 레코드에 설정 

8.function getPoint(pointParam){코드}에서 function 오브젝트를 생성

9. getPoint function 오브젝트의 [[Scope]]에 book 함수의 내부 영역이 설정됨

10. getPoint를 선언적 환경 레코드에 설정

11. var point;에서 변수 이름을 선언적 환경 레코드에 설정

12. var point = 100;에서 선언적 환경 레코드의 point에 100 할당

13. return getPoint;에서 getPoint function 오브젝트 반환

14. obj에 getPoint function 오브젝트를 할당

15. console.log(obj(400))에서 obj를 호출하면 getPoint(400) 함수가 호출됨 

--getPoint 함수의 클로저와 관련된 부분--

1. 실행 콘텍스트를 생성 

2. getPoint function 오브젝트의 [[Scope]]를 외부 렉시컬 환경 참조에 바인딩 

3. pointParam이라는 파라미터 이름에 400을 매핑하여 선언적 환경 레코드에 설정

4. 함수 안의 코드 실행 

5. point = point + bookParam + pointParam;에서

6. point와 bookParam을 외부 렉시컬 환경 참조에서, pointParam을 선언적 환경 레코드에서 식별자 해결

7. 각각을 더한 값을 ponit에 할당 

8. 따라서 콘솔창에 700이 출력됨 

감사합니다!

답변 1

답변을 작성해보세요.

0

좋습니다.^^