ECMA262赋值表达式中LeftHandSideExpression求值规则咨询
你给出的示例代码如下:
var myVar = 'Hola'; { let myVar; myVar = 'Hello' }
针对第四行赋值语句左侧myVar作为LeftHandSideExpression的求值逻辑,具体步骤如下:
- 确定当前执行上下文的词法环境:代码运行到块级作用域内部,当前使用的是这个块对应的词法环境,全局词法环境是它的外层引用对象。
- 标识符解析:在当前词法环境的环境记录中查找
myVar绑定,按照由内到外的查找规则,首先命中块内用let声明的myVar绑定,不会向上找到全局作用域的var声明的同名变量。 - 生成引用值:返回这个绑定对应的可写引用,该引用包含三个核心信息:绑定所属的环境记录(当前块级作用域的环境记录)、绑定名称
myVar、当前上下文的严格模式标记。 - 后续赋值操作会基于这个引用,把右侧
'Hello'的值写入到对应的绑定中,仅修改块内myVar的值,对全局的myVar没有影响。
内容的提问来源于stack exchange,提问作者AngryJohn
相关产品推荐
相关产品推荐

