js 连续赋值的问题

首先是两个题

var a = {x:1}
var b = a
a = a.x = {x:1}   
console.log(a)      // a = {x:1}
console.log(b)      // b = {x:{x:1}}
var a = {n: 1};
var b = a;                  
a.x = a = {n: 2};    
console.log(a)              // a = {n:2}
console.log(b)              // b = {n:1,x:{n:2}}

一、首先连续赋值其实是有顺序的

比如 : A=B=C 它的赋值顺序是 B=C , A=B

二、其次是有一个问题

js内部为了保证赋值语句的正确,会在一条赋值语句执行前,先把所有要赋值的引用地址取出一个副本,再依次赋值。

解析第一个问题

var a = {x:1}
var b = a
所以b = {x:1}
a = a.x = {x:1}
首先B=C,a = {x:{x:1}}, 所以b = {x:{x:1}}
然后A=B,a = {x:1}
所以最终结果为 a={x:1} b={x:{x:1}}

解析第二个问题

var a = {n: 1};
var b = a;
所以b = {n:1}
a.x = a = {n: 2};
首先B=C,因为这里转向新的地址,所以会预先复制一个副本,但是这里是新a = {n:2},然后A=B,原a = {n:2,x:{n:2}} ,所以b = 原a = {n:2,x:{n:2}}。

参考:https://www.cnblogs.com/xxcanghai/p/4998076.html](https://www.cnblogs.com/xxcanghai/p/4998076.html

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容