了解如何將對象,數組和函數複製並傳遞給函數。要知道引用時複製了什麼。理解原始值是通過複製值來進行複製和傳遞的。
這是基礎觀念,學習js時一定要知道的事情~
By Value
有5個資料類型 Boolean, null, undefined, String, Number。
我們可以稱它們為primitive types。
宣告變數 a 的時候,a的記憶體會有一個位置存放它
在指定 b 它的值等於 a 的時候,b也會建立一個記憶體位置存放它。a 和 b雖然值是一樣的,但是他們的記憶體位置是不同的。
1 | var a = 3; |
By Reference
資料類型 Array, Function, Object。
我們可以稱它為 Objects。
當宣告變數 a 為一個Object 的時候,記憶體位置會給他一個位置;在指令另一個變數 b 的值等同於 a 的時候,並不會再另外創建一個記憶體位置給 b,而是一樣指定同一個位置給 b,因此如果 a 的值改變的時候,b也會跟著做變化,因為他們是參考同一個位置。
1 | var a = { name: 'Stoner' }; |
加強補充範例
是使用 object literal 的方式來建立物件,則會變成 by Value,新增了一個記憶體的位置。
1
2
3
4
5
6
7
8 var a = { name: 'Stoner' };
var b = a;
console.log(a.name); //-> 'Stoner'
console.log(b.name); //-> 'Stoner'
a = { name: 'Big Bird' };
console.log(a.name); //-> 'Big Bird'
console.log(b.name); //-> 'Stoner'
參考資料
Value vs. Reference
[筆記] 談談JavaScript中by reference和by value的重要觀念
[筆記] 談談JavaScript中的物件建立(Object) - Part 2 | 利用大括號{}建立物件