1. 程式人生 > 實用技巧 >JavaScript深入之記憶體空間思考題

JavaScript深入之記憶體空間思考題

var a = {n:1};//建立物件{n:1},賦值給a
var b = a;//b引用a的物件,實際上此時記憶體只有一個物件。變數a,b同時指向這個物件
a.x = a = {n:2};//此時將這個物件的鍵值x賦值,賦值內容是運算表示式a={n:2}的運算結果{n:2}
//a={n:2}這個運算表示式又建立了一個物件{n:2},同時讓a指向這個物件
//此時記憶體中有兩個物件 a指向於新的物件{n:2},b指向於原物件{n:1,x:{n:2}}
console.log(a.x);// -->undefined
console.log(b.x);// -->{n:2}

以上是一種解析 另一種解析是:

首先 . 運算子優先順序高於= 所以先給{n:1}物件建立了x屬性,物件變成{n:1,x:undefined}(當前a和b都是指向此記憶體物件),
然後連等從右往左執行,先把a指向改成{n:2},然後把最初的記憶體物件的x屬性指向改成{n:2}(因為.運算子已執行,所以此時a.x是指{n:1,x:undefined}的x屬性),記憶體物件變成{n:1,x:{n:2}}
此時只有b還是指向這個記憶體物件 所以:
a.x -->undefined
b -->{n:1,x:{n:2}}

引用:
轉載:https://www.cnblogs.com/bbqwwb/p/8397712.html


更詳細的解析:https://blog.csdn.net/mx18519142864/article/details/83111207