• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    해결됨

outerEnvironmentReference 질문

23.02.10 10:43 작성 조회수 216

0

안녕하세요.

책에서 OuterEnvironmentReference는 현재 함수가 선언될 당시의 외부 LexicalEnvironment를 참조한다고 하였는데 이는 VariableEnvironment와 같은디 궁금합니다.

그리고 LexicalEnvironment의 environmentRcord는 선언된 식별자를 포함해 let과 const 등까지 포함하는지 궁금합니다..

또 ThisBinding이 variableEnvironment나 LexicalEnvironment의 environmentRecord에 속해 있는 게 아니라 따로 떨어져있는게 맞는지가 궁금합니다

답변 1

답변을 작성해보세요.

2

  1. 아뇨, 외부의 LexicalEnvironment가 맞습니다. 외부의 변경사항을 계속 참고해야 하므로 '변경되지 않는' VariableEnvironment를 참조하는 것은 의미가 없겠죠.

  2. let, const도 물론 포함합니다.

  3. ES2022 현재 시점에서는 environmentRecord에 속하는게 맞습니다.

ECMAScript 명세서는 실행컨텍스트에 대해 ES5.1, ES2015 및 그 이후에도 매번 설명이 달라지고 있습니다. 해마다 새로 추가되는 기능들을 기존 개념에 포섭하는 것이 불가능한 경우가 발생하기 때문입니다. 그러다보니 이를 계속해서 팔로우업하는게 과연 의미가 있을까 하는 생각이 듭니다.
실행컨텍스트는 명세서에서도 어디까지나 개념상의 이론일 뿐이라고 강조합니다. 따라서 내/외부 환경의 변경 및 참조 여부 등의 흐름을 이해하면 충분합니다. 완벽히 이해하려 하기보다는 흐름만 이해하고 넘기시는 편이 좋을거라 생각해요.

ES2015: Lexical Environments and Environment Record values are purely specification mechanisms and need not correspond to any specific artefact of an ECMAScript implementation. It is impossible for an ECMAScript program to directly access or manipulate such values. (https://262.ecma-international.org/6.0/#sec-executable-code-and-execution-contexts)

ES2022: Environment Records are purely specification mechanisms and need not correspond to any specific artefact of an ECMAScript implementation. It is impossible for an ECMAScript program to directly access or manipulate such values. (https://262.ecma-international.org/#sec-executable-code-and-execution-contexts)

Sio K님의 프로필

Sio K

질문자

2023.02.10

정말 감사합니다 선생님 !!