Javascript 2021의 어휘 환경 및 환경 기록 살펴보기

ECMAScript 사양의 다른 버전에 따라 Lexical EnvironmentEnvironment Record를 먼저 이해해 봅시다.

ES2015에서 ES2020 사양까지:-

어휘 환경:


  • 어휘 환경은 코드의 어휘 중첩 구조를 기반으로 식별자와 특정 변수 및 함수의 연결을 정의하는 데 사용되는 사양 유형입니다.
  • 어휘 환경은 두 가지 구성 요소로 구성됩니다.

  • 환경기록

    연결된 Lexical Environment 범위 내에서 생성된 식별자 바인딩을 기록합니다. Lexical Environment의 EnvironmentRecord라고 합니다.

  • 외부 참조

    외부 환경에 대한 참조입니다(전역 환경에서는 null).


  • 의사 코드를 사용한 개념적 보기:

    executioncontext.environment = {
        environmentRecord: { 
        // storage
        <identifier> : <value>
        <identifier> : <value>
        }
        // reference to the parent environment
        outer: <...>    
    }
    


    참고: - Execution Context 내부에 생성된 [[Environment]]type Lexical Environment입니다.
    [refer ES2020]



    12th Edition ECMAScript2021 사양에 따르면:

    환경기록


  • 환경 레코드는 코드의 어휘 중첩 구조를 기반으로 식별자와 특정 변수 및 함수의 연결을 정의하는 데 사용되는 사양 유형입니다.
  • 모든 환경 기록에는 하나의 구성 요소가 있습니다.

  • 외부 참조

    null이거나 외부 환경 레코드에 대한 참조인 [[OuterEnv]] 필드입니다.
    의사 코드를 사용한 개념적 보기:


  • executioncontext.environment = {
        // storage
        <identifier> : <value>,
        <identifier> : <value>,
        // reference to the parent environment
        outer: <...> 
    }
    

    참고: - 실행 컨텍스트 내부에 생성된 [[Environment]]type 환경 레코드[refer ES2021]입니다.


    Structure of execution context도 이해하자

    실행 컨텍스트:


  • 실행 컨텍스트는 코드의 런타임 평가를 추적하는 데 사용되는 지정 장치입니다.
  • 연결된 코드의 실행 진행 상황을 추적하려면 LexicalEnvironment , VariableEnvironment 등과 같은 다양한 상태 구성 요소가 필요합니다.

  • 의사 코드에서:

    ExecutionContext = {
        VariableEnvironment: { ... },
        LexicalEnvironment: { ... },
        // other components
    }
    


    메모:


    ES2020까지
    ES2021부터


    - 실행 컨텍스트의 LexicalEnvironment componentVariableEnvironment component는 항상 어휘 환경[refer ES2020]입니다.

    - 실행 컨텍스트의 LexicalEnvironment componentVariableEnvironment 구성 요소는 항상 환경 레코드[refer ES2021]입니다.



    요약



    위의 코드 스니펫에서 수행하는 모든 단계를 간단히 요약해 보겠습니다.
  • ECMAScript2021에서 실행 컨텍스트 내부에 생성되는 [[environment]]는 Lexical Environment가 아닌 type Environment Record입니다.
  • 따라서 실행 컨텍스트의 LexicalEnvironment componentVariableEnvironment components는 항상 환경 레코드입니다.

  • 마무리!!



    시간 내 주셔서 감사합니다!! 함께 배우고 성장하기 위해 연결합시다.
    Github

    좋은 웹페이지 즐겨찾기