var foo = {n: 1};
foo.x = foo = {a: 2};
console.log(foo.x);
// Output -- undefined
var a = 1;
c = b = a;
console.log(a,b,c);
// Output -- 1, 1, 1
您能解释一下为什么第一个示例返回 undefined
而第二个示例返回 1,1,1
吗?
最佳答案
发生这种情况是因为 javascript 中的表达式是从左到右求值的。
所以在这个表达式中:
foo.x=foo={a:2}
首先 foo
被取消引用,属性 x
被设置为右操作数 foo={a:2}
的目标结果。
然后,在计算右操作数时,foo
值被重新赋值,因此对对象先前实例的引用丢失。
为了演示它,我们可以简单地创建另一个变量来保存它:
var foo = {n:1};
var bar = foo;
foo.x=foo={a:2};
console.log(foo, bar);
关于javascript - JavaScript 中的变量初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43154775/