本文主要是介绍【转】JavaScript——连续赋值与求值顺序(var a.x=a={n:2}),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
例题
var a = {n: 1
};
var b = a;
a.x = a = { n: 2 };
alert(a.x); // undefined
alert(b.x); // [object Object]
解析:
a.x = a = { n: 2 };
. 操作符的优先级比 = 高,= 从右向左解析,a.x -> 这时候的a还是原来的a,
a = {n: 1,x: undefined
};
由于b引用的是当前的a,所以b也相当于
b = {n: 1,x: undefined
};
然后看
a.x = a = { n: 2 };
“a” 重新赋值,这时的 “a” 已经不是我们认识的 “a” 了,它重新找了地址,指向了新对象 { n: 2 }
a = { n: 2 };
“a” 不是原来的 “a”,但是 “a.x” 还是原来的 “a.x” (a.x的指向在a改变之前就已经牢牢的存下来了)。
被a抛弃的地址 = {n: 1,x: a的新指向对象
};
此时这个地址里的内容只有 “b” 能找到,因为 “b” 的指针指向了它
b = {n: 1,x: a的新指向对象
};
所以最后的结果如下:
b = {n: 1,x: a的新指向对象
};
a = {n: 2
};a.x = undefined;
b.x = a;
---------------------
作者:Liyuxinger
来源:CSDN
原文:https://blog.csdn.net/liyuxing6639801/article/details/79170394
版权声明:本文为博主原创文章,转载请附上博文链接!
这篇关于【转】JavaScript——连续赋值与求值顺序(var a.x=a={n:2})的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!