Javascript 标识符解析和简单赋值
让我们有一个简单的脚本:Javascript 标识符解析和简单赋值,javascript,Javascript,让我们有一个简单的脚本: obj=new String('str');//1 obj.length;//2 在第1行,我们有一个简单的任务,评估如下: 计算PrimaryExpression:Identifier(obj在我的例子中)(未定义、obj、false)将作为结果返回 计算NewExpression新字符串('str')。通过rref GetValue(rref) 将第3步得到的值放入第1步得到的参考值 返回步骤4的结果 在这一行,obj-->“str”绑定不会添加到任何执行上下文的
obj=new String('str');//1
obj.length;//2
在第1行,我们有一个简单的任务,评估如下:
obj
在我的例子中)<代码>(未定义、obj、false)将作为结果返回新字符串('str')代码>。通过rref
GetValue(rref)
obj-->“str”
绑定不会添加到任何执行上下文的环境记录中。但是当obj
PrimaryExpression:Identifier
将被评估为('str',obj,false)
类型引用,我们可以通过该引用获得'str'
的属性
问题:
为什么
PrimaryExpression:第2行的标识符
将被评估为('str',obj,false)
?这是一个不寻常的问题,但仍然很有趣
您的问题的答案是,它被添加到全局执行上下文中(假设此脚本是整个程序)
看
步骤3为全局代码设置执行上下文,正是在该上下文中,obj
最初被引用,并且在上面的步骤4中,PutValue
操作设置的绑定。确切地说,PutValue(V,W)
其中isUnsolvedReference(V)
将true
添加的属性返回到全局对象,属性名为getReferenceValue(V)
,值为W
。全局对象的环境记录是对象环境记录,因此将属性添加到global
并添加相应的绑定。我希望,我现在的理解是正确的。