ECMAScript规范中作用域链及变量查找规则的提及位置查询
ECMAScript标识符查找规则的规范定义
你的推测完全正确,变量、函数等标识符的解析查找确实是在当前执行上下文的LexicalEnvironment上完成的。
对应的规范规则说明
相关规则在ECMAScript规范的**标识符解析(Identifier Resolution)**模块有明确定义:
- 核心逻辑定义在
GetIdentifierReference抽象操作中,该操作要求传入当前执行上下文的词法环境作为查找的起始环境,沿着环境记录的外层引用链逐层查找目标标识符的绑定,是所有标识符访问、赋值操作的底层依赖。 - 你贴出的块级代码执行流程里,步骤4已经将运行时执行上下文的
LexicalEnvironment切换为新创建的块级声明环境blockEnv,所以后续块内代码执行阶段的所有标识符查找,都会以blockEnv作为查找起点,找不到再回溯到外层环境,这也是let/const块级作用域生效的核心逻辑。
补充说明:很多开发者容易混淆
LexicalEnvironment和VariableEnvironment,后者仅在全局、函数代码的实例化阶段用来存储var声明、普通函数声明的绑定,运行阶段的标识符查找全程只会使用当前执行上下文的LexicalEnvironment。
内容的提问来源于stack exchange,提问作者AngryJohn
相关产品推荐
相关产品推荐

