smellyshovel Asked:2020-01-20 00:52:58 +0800 CST2020-01-20 00:52:58 +0800 CST 2020-01-20 00:52:58 +0800 CST 词法环境块 772 规范说词法环境(LE)是一些执行上下文(EC)的记录(见表 22)。 但是关于 LE 本身的章节也说,每次执行块代码、函数声明代码和 catch 语句代码时也会创建一个单独的 LE。 同时,任何地方都没有说当这些表达式的代码被执行时,会创建一个新的 EC。 因此,这里出现了一个问题:如果在上述表达式的代码执行开始时没有创建新的 EC,那么为它们创建的 LE 与什么相关联?还是不仅在执行功能代码(当然是工作代码)时创建了新的 EC?但在这种情况下,为什么它的内部组件(表 21)不包含一个专用于功能以外的东西的必需组件?例如,同一块?如何解释规范中写的内容? ecmascript 1 个回答 Voted Best Answer Grundy 2020-01-20T01:15:38+08:002020-01-20T01:15:38+08:00 每个语句的规范都有一个Runtime Semantic部分,用于描述行为。 以 BlockSaement为例 块:{ StatementList } 设oldEnv为当前执行上下文的 LexicalEnvironment 。 让 blockEnv 成为执行NewDeclarativeEnvironment(oldEnv)的结果。 执行BlockDeclarationInstantiation(StatementList, blockEnv)。 将当前执行上下文设置为 blockEnv 作为LexicalEnvironment。 令blockValue为执行StatementList的结果。 将当前执行上下文设置为oldEnv作为LexicalEnvironment。 返回块值。 这就是重点: 当前的LexicalEnvironment 被保存, 创建一个新的LexicalEnvironment并将其设置为执行上下文 表达式执行后,将保存的LexicalEnvironment设置为执行上下文
每个语句的规范都有一个Runtime Semantic部分,用于描述行为。
以 BlockSaement为例
块:{ StatementList }
这就是重点: