首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ES6中的块和执行环境

ES6中的块和执行环境
EN

Stack Overflow用户
提问于 2015-04-20 13:37:33
回答 2查看 163关注 0票数 0

在ES6中,每个块都与一个LexicalEnvironment相关联,以支持该语言版本的块作用域特性。

这是否意味着在ES6中为每个块实例化了一个新的ExecutionContext

参考资料:http://globaldev.co.uk/2013/09/es6-part-2/

例如(我在这里故意使用函数范围的var ):

代码语言:javascript
复制
function foo() {

  {
    var foo; // Has a new ExecutionContext been instantiated here? 
  }

}

规范的相关位:https://people.mozilla.org/~jorendorff/es6-draft.html#sec-block-runtime-semantics-evaluation

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-20 13:43:12

不,每个函数只有一个执行环境。LexicalEnvironment只是暂时替换当前的LexicalEnvironment。

  1. 让oldEnv成为正在运行的执行上下文的LexicalEnvironment。
  2. 让blockEnv成为NewDeclarativeEnvironment(oldEnv)。执行BlockDeclarationInstantiation(StatementList,blockEnv)。
  3. 将正在运行的执行上下文的LexicalEnvironment设置为blockEnv。
  4. 让blockValue是评估StatementList的结果。
  5. 将正在运行的执行上下文的LexicalEnvironment设置为oldEnv。
  6. 返回blockValue。
票数 3
EN

Stack Overflow用户

发布于 2015-04-20 13:43:36

这是否意味着在ES6中为每个块实例化了一个新的ExecutionContext?

不,我不相信是这样的。

根据我对规范的读取,在执行块的过程中,当前ExecutionContextExecutionContext暂时被为块实例化的LexicalEnvironment所取代。在控件离开块之前还原LexicalEnvironment

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29749503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档