<code>
var a = {
n:1
}
var b = a;
a.x = a = {
n:2
}
console.log(a.x)
console.log(b.x)
</code>
連等賦值為A=B=C;從右往左今魔,所以是C=B,B=A障贸;
所以這段代碼應(yīng)該是這樣執(zhí)行的:全局執(zhí)行上下文創(chuàng)建后错森,創(chuàng)建變量對象時,創(chuàng)建一個變量a 它的值為一個引用地址的指針篮洁,指向n:1
然后創(chuàng)建一個變量b涩维,它的值為變量a的引用地址指針,此時袁波,a和b是完全一樣的
然后執(zhí)行下面的代碼瓦阐,按照早先的思路,連等賦值應(yīng)該是從右往左執(zhí)行的篷牌,應(yīng)該是n:2這個值賦給a睡蟋,然后a賦值給a.x,所以a.x應(yīng)該為n枷颊;2戳杀,b.x應(yīng)該為undefined;實際是錯的夭苗。
先創(chuàng)建一個新的引用地址 n:2
.運算符是優(yōu)先于=運算符的信卡,所以先聲明一個a的屬性x,為undefined题造,此時a是指向b的傍菇,所以b現(xiàn)在也擁有一個x屬性為undefied,然后將a變量的引用地址指針改變?yōu)閚:2界赔,因為a的變量引用地址指針變成了n:2丢习,新的引用地址當中沒有x這個屬性须妻,所以x為undefined.
然后a.x現(xiàn)在指向的是舊的引用地址,也就是b的引用地址中的x泛领,然后將b.x賦值為n:2。所以最后敛惊,a.x應(yīng)該為undefined渊鞋,b.x為n:2
Paste_Image.png