var a = {n:1};
var b = a;
a.x = a = {n:2};
a.x = ?
b.x = ?
a = ?
赋值顺序为从右向左赋值操作,
a == >{n:1};
b==>a==>{n:1}
a = {n:2} a==>{n:2}
a.x = a a.x==>{n:2}
理解:
var a = {n:1};
var b = a;
a.x = 3;
//a==>{n:1,x:3}
//b==>{n:1,x:3}
a.x = a = {n:4}
//a==>{n:4}
//b==>{n:1,x:{n:4}}
其中,a.x在赋值过程中应该是b中创建一个x,并给b中的x的赋值过程,此刻a.x中的a不是a,因为a已经被赋值为新值,a中已经没有x属性。应该是在创建中被临时创建的一个变量,但是又有一个b的引用,即,b中的x被赋值为a的值。
如果执行下列将a与b彻底隔离。
a = {n:2};
//a==>{n:2};
//b==>{n:1,x:3}
引自网络一张图片的理解
https://sfault-image.b0.upaiyun.com/107/392/1073921741-551a75158089c