傳值 & 傳址
傳值
所有的基本型別都是「傳值」。
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 就不會有任何關聯了。