在创建新词法环境时,我们可以在ECMAScript规范中的哪里找到确切的位置?

时间:2018-07-26 16:34:28

标签: javascript ecmascript-6 ecmascript-2017

ECMAScript specification的何处可以找到准确描述创建新的词法环境的文本?

  • 我在“ 8.1 Lexical Environments”中找不到它,它只是粗略地指出:
      

    通常,词法环境与ECMAScript代码的某些特定语法结构(例如TryStatement的FunctionDeclaration,BlockStatement或Catch子句)相关联,并且每次评估此类代码时都会创建一个新的词法环境。

  • 从“ 8.3 Execution Contexts”开始,我们知道每个执行上下文都包含一个词法环境,但是我们不确切知道何时创建新的执行上下文,以及是否确实存在其他情况创建了词法环境。 8.3仅声明:
      

    每当将控制权从与当前正在运行的执行上下文关联的可执行代码转移到与该执行上下文不关联的可执行代码时,就会创建新的执行上下文。

我试图仅基于来自官方ECMAScript规范的信息来了解JavaScript实现的行为。因此,我尽量避免在其中未定义任何术语(例如 scope )。

1 个答案:

答案 0 :(得分:2)

8.1.2.2-8.1.2.6是创建新词法环境的方式。您可以通过搜索名称找到规范中使用的所有位置。

例如。如果您搜索NewFunctionEnvironment,则会发现在9.2.1.1 PrepareForOrdinaryCall中创建了一个。规范中只有一个地方可以创建全局,模块,功能和对象环境。在多个地方创建了声明式环境。