welcome to Cheeto's blog

0%

JavaScript核心篇:物件傳址觀念的實際運作模式

物件傳址觀念的實際運作模式

在這篇章節來實做看看傳址的運作模式,由下面的程式碼為範例。

1
2
3
4
5
var a = {x: 1};
var b = a;
a.y = a = {x: 2};
console.log(a.y);
console.log(b);

接下來就一步一步的來看看傳址的運作邏輯吧!

第一步驟

1
2
var a = {x: 1};
var b = a;

傳址第一步驟

因為物件型別是傳址的特性,所以 var b = a; 時是指向同一個位址。

第二步驟

1
a.y = a = {x: 2};

傳址第二步驟

雖然 =(等號) 的相依性是由右至左,但a.y = a = {x: 2};是同時運行的,所以 a.ya 都會指向同一個位址。

最後

1
2
console.log(a.y);
console.log(b);

這邊可以由第二步驟看到,由於 a 已經指向 0x02 的位址,裡面並沒有 y 這個屬性,所以會回傳 undefined。
而第二步驟時 a.y = a = {x: 2}; 裡面的 a.y = {x: 2}; 其實也可以等於 b.y = {x: 2};,因為它們在這時還是同一個參考位址。

所以就會產生下列這樣的結果 ↓

物件運作測試