<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)建變量對(duì)象時(shí),創(chuàng)建一個(gè)變量a 它的值為一個(gè)引用地址的指針,指向n:1
然后創(chuàng)建一個(gè)變量b,它的值為變量a的引用地址指針,此時(shí),a和b是完全一樣的
然后執(zhí)行下面的代碼,按照早先的思路,連等賦值應(yīng)該是從右往左執(zhí)行的,應(yīng)該是n:2這個(gè)值賦給a,然后a賦值給a.x,所以a.x應(yīng)該為n;2,b.x應(yīng)該為undefined;實(shí)際是錯(cuò)的。
先創(chuàng)建一個(gè)新的引用地址 n:2
.運(yùn)算符是優(yōu)先于=運(yùn)算符的,所以先聲明一個(gè)a的屬性x,為undefined,此時(shí)a是指向b的,所以b現(xiàn)在也擁有一個(gè)x屬性為undefied,然后將a變量的引用地址指針改變?yōu)閚:2,因?yàn)閍的變量引用地址指針變成了n:2,新的引用地址當(dāng)中沒有x這個(gè)屬性,所以x為undefined.
然后a.x現(xiàn)在指向的是舊的引用地址,也就是b的引用地址中的x,然后將b.x賦值為n:2。所以最后,a.x應(yīng)該為undefined,b.x為n:2

Paste_Image.png