执行环境相关概念 - pod4g/tool GitHub Wiki

0. 名词

执行上下文,也称之为执行环境

javascript的代码和执行是要分开的,js代码有三种类型:

  • 全局代码(不在函数体内的代码都属于全局代码)
  • 函数代码
  • eval代码

每个代码执行时,都会创建相应的执行环境,因为在代码执行时,会访问这个执行环境来存取变量

1. 词法环境

词法环境是一个用于特定变量和函数标识符在ES代码的嵌套结构上关联关系的规范类型

这句话超级难懂

https://www.ecma-international.org/ecma-262/#sec-executable-code-and-execution-contexts

这句话是关键:词法环境和环境记录项是纯粹的规范机制,而不需要 ECMAScript 的实现保持一致。ECMAScript 程序不可能直接访问或者更改这些值。

1.1 环境记录项

环境记录项记录了在它的关联词法环境域内创建的标识符绑定情形。

1.2 外部词法环境引用

用于表示词法环境的逻辑嵌套关系模型。(内部)词法环境的外部引用是逻辑上包含内部词法环境的词法环境。外部词法环境自然也可能有多个内部词法环境。例如,如果一个 FunctionDeclaration 包含两个嵌套的 FunctionDeclaration,那么每个内嵌函数的词法环境都是外部函数本次执行所产生的词法环境。

2. 执行环境

执行环境包含词法环境

https://segmentfault.com/a/1190000012162360

https://medium.com/better-programming/execution-context-lexical-environment-and-closures-in-javascript-b57c979341a5