ECMAScript闭包学习:块的Runtime Semantics: Evaluation是否对应新执行上下文?
问题解答
不是,这段ECMA-262规范描述的是普通代码块({ ... })的执行逻辑,和函数执行时切换至新执行上下文的场景完全不同,核心区别如下:
- 执行上下文是否新建:函数执行时会创建一个全新的执行上下文(包含LexicalEnvironment、VariableEnvironment、ThisBinding、Arguments等完整上下文要素);而这段规范里只是修改了当前执行上下文的
LexicalEnvironment属性,并没有创建新的执行上下文。 - 具体逻辑差异:
规范里的块执行步骤,只是临时将当前执行上下文的词法环境替换为基于旧环境创建的新声明式环境,执行完块内语句后立刻恢复原词法环境——本质是为了实现块级作用域(比如let/const的块级绑定),属于当前执行上下文内的词法环境层级切换。
函数执行则是完全进入新的执行上下文,会处理this绑定、参数初始化、函数作用域的变量实例化等一系列独立逻辑,执行完毕后才会退出该上下文回到调用栈的上一层。 - 作用域层级不同:块的作用域是嵌套在当前执行上下文的词法环境中的,而函数执行的作用域属于独立的执行上下文层级。
内容的提问来源于stack exchange,提问作者user19551894
相关产品推荐
相关产品推荐

