Let's first understand the Lexical Environment & Environment Record as per different versions of ECMAScript Specification.
From ES2015 till ES2020 Specification:-
Lexical Environment:
- A lexical environment is a specification type used to define the association of Identifiers to specific variables and functions, based upon the lexical nesting structure of your code.
 - A lexical environment consists of two components:
- 
Environment Record
It records the identifier bindings that are created within the scope of its associated Lexical Environment. It is referred to as the Lexical Environment's EnvironmentRecord. - 
Outer Reference
A reference to outer environment (null in the global environment). 
 - 
 
A conceptual view using pseudo-code:
executioncontext.environment = {
    environmentRecord: { 
    // storage
    <identifier> : <value>
    <identifier> : <value>
    }
    // reference to the parent environment
    outer: <...>    
}
Note: - The [[Environment]] created inside Execution Context is of type Lexical Environment 
 [refer ES2020]
According to 12th Edition ECMAScript2021 Specification:
Environment Record
- A Environment Record is a specification type used to define the association of Identifiers to specific variables and functions, based upon the lexical nesting structure of your code.
 - Every Environment Record has one component:
- 
Outer Reference
An[[OuterEnv]]field, which is either null or a reference to an outer Environment Record. A conceptual view using pseudo-code: 
 - 
 
executioncontext.environment = {
    // storage
    <identifier> : <value>,
    <identifier> : <value>,
    // reference to the parent environment
    outer: <...> 
}
Note: - The [[Environment]] created inside Execution Context is of type Environment Record [refer ES2021]
Let's also understand the Structure of execution context
Execution Context:
- An execution context is a specification device that is used to track the runtime evaluation of the code.
 - To keeps the track of execution progress of its associated code, it needs various state components like 
LexicalEnvironment,VariableEnvironment, etc. 
In pseudo-code:
ExecutionContext = {
    VariableEnvironment: { ... },
    LexicalEnvironment: { ... },
    // other components
}
Note:
| Till ES2020 | From ES2021 | 
|---|---|
- The LexicalEnvironment component and VariableEnvironment component of an execution context are always Lexical Environments [refer ES2020]
 | 
- The LexicalEnvironment component and VariableEnvironment components of an execution context are always Environment Records [refer ES2021]
 | 
Summary
Let's have a quick recap of all the steps we perform in the above code snippet.
- In ECMAScript2021, the 
[[environment]]which is created inside the execution context is oftypeEnvironment Record instead of Lexical Environment. - So, The 
LexicalEnvironment componentandVariableEnvironment componentsof an execution context are always Environment Records. 
Wrap Up!!
Thank you for your time!! Let's connect to learn and grow together.
Github Twitter
              

    
Top comments (0)