我知道赋值运算符是右结合的。
所以例如 x = y = z = 2
相当于(x = (y = (z = 2)))
既然如此,我尝试了以下方法:
foo.x = foo = {a:1}
我希望该对象foo
将使用值创建{a:1}
,然后x
将创建该属性,该属性将foo
只是对该foo
对象的引用。
(如果我将多个赋值语句分成两个单独的语句,实际上会发生这种情况foo = {a:1};foo.x = foo;
)
结果实际上是:
ReferenceError: foo 未定义(…)
所以我尝试了以下方法:
var foo = {};
foo.x = foo = {a:1};
现在我不再得到异常但foo.x
未定义!
为什么作业没有按我的预期工作?
免责声明:“重复”问题似乎与我要问的问题非常不同,因为问题在于分配中创建的变量是全局的,与使用
var
关键字创建的变量相反。这不是这里的问题。