• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

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

21.05.23 12:31 작성 조회수 102

4

안녕하세요. 좋은 강의 감사드립니다!

[정리 시간]의 내용을 작성해보았습니다. 

==초기화 단계==

1. obj.getTotal(11, 22, 55)함수가 호출되면 실행 콘텍스트가 생성되고 실행 콘텍스트 안으로 이동 

-함수를 호출한 오브젝트, 함수 코드, 호출한 파라미터 값을 실행 콘텍스트로 넘겨줌

2. getTotal 오브젝트의 [[FormalParamters]]에서 

-호출된 함수의 이름을 구함

-["one", "two", "two"]의 형태

3. 상기의 배열을 하나씩 읽음

4. 호출한 파라미터의 값에서 index 번째의 값을 구함

5. 배열 안에 있는 파라미터의 이름과 4번에서 구한 값을 파라미터 작성 순서에 맞추어 값을 매핑 

6. 선언적 환경 레코드에 

-{one:11}을 먼저 매핑하고 두번째로 {two:22}를 매핑함

-세번째로 two를 매핑해야 하는데 이미 two라는 이름이 존재하고, 이를 매핑하는 과정에서 값이 55로 변경됨

-즉, {one:11, two:55} 형태로 설정함

7. 함수에 초기화할 코드가 없으므로 

-첫번째 줄로 이동하여 함수 코드를 실행

==실행 단계==

8. console.log(one + two);

-선언적 환경 레코드에서 one과 two의 값을 구함

-11+55이 결과인 66이 출력  

obj.getTotal() 함수의 외부 렉시컬 환경 참조는 어떻게 되어 있을까요?

이 경우에는 글로벌 오브젝트일까요..? getTotal이 프로퍼티로서 속해있는 obj 오브젝트가 외부 렉시컬 환경 참조일까요..?

obj.getTotal() 함수가 obj라는 글로벌 변수 내부의 프로퍼티로서  있다보니 헷갈리네요ㅜㅜ 

답변 1

답변을 작성해보세요.

2

깨끗합니다.

obj.getTotal() 함수의 외부 렉시컬 환경 참조는 어떻게 되어 있을까요? 이 경우에는 글로벌 오브젝트일까요..? getTotal이 프로퍼티로서 속해있는 obj 오브젝트가 외부 렉시컬 환경 참조일까요..?

==> 외부 렉시컬 참조가 클로저입니다. 결과를 작성하면 흥미가 반감될 것 같아요. 뒤에서 나옵니다.

obj.getTotal() 함수가 obj라는 글로벌 변수 내부의 프로퍼티로서  있다보니 헷갈리네요ㅜㅜ 
==> getTotal() 함수에서 this가 obj를 참조합니다. 글로벌 변수라는 표현보다 obj는 빌트인 Object입니다. 이것과 같이 앞의 질문을 같이 생각하면 정리가 될 것 같습니다.

이하영님의 프로필

이하영

질문자

2021.05.23

넵 답변 감사드립니다~!