傳值 & 傳址
傳值
所有的基本型別都是「傳值」。
1 | var a = 10; |
這邊可以看到 b = a
但是a
的值改變了之後b
卻維持在原位,這是因為基本型別的傳遞是利用複製的,所以 b = a
的值是複製a
的值而已。
可以看作a
、b
兩個都是不同的個體。
所以之後a
不管做了什麼樣的更新,都跟b
不會有任何的關係。這種方式稱為「傳值」。
傳址
所有的物件型別都是「傳址」。接下來就讓我們來看看什麼是傳址吧!
1 | var person = { |
會變成下面這樣 ↓
為什麼會有這樣的變動呢?我們用下面這個圖片來解釋:
var person2 = person
的時候,person
其實是把記憶體參考位址傳給了 person2
,因為它們都是同一個位址,所以就算 person2
把記憶體參考位址的東西變動了,在同一個位址的 person
也當然會跟著變動了。
而這種方式就稱為「傳址」。
接下來我們看下一個範例
1 | var person = { |
讓我們用下圖解釋為什麼會這樣
這邊可以看到如果 person2
指向一個新的物件的話,它其實會傳入一個新的位址上。
這時候 person
跟 person2
就不會有任何關聯了。