針對一個變數的純值(Number, String, Boolean, undefined 與 NULL等)用等號傳遞給另一個變數或函式,此值會複製一份,且會創造一個新的記憶體位址,將那個值存入。
EX:
var a = 3;
var b;
b = a
此時變數 b 的值雖然也是3,但是這個3是從a的值複製來的,也就是對方的拷貝,這兩個3分別放在兩個不同的記憶體位置。
所以改變a的值是不影響b的值。
如果剛剛的範例改變a的值,b會變多少呢?
EX:
var a = 3;
var b;
b = a
a = 10;
console.log(b); //3
b 仍然是3,因為拷貝之後就與a的值沒有關係了。
這就是純值的 by value
針對所有物件(包含Array與function)用等號賦值給變數,會指向同一個原物件。
var a = {name:'Ivy'};
var b = a ;
a.name='Lisa';
console.log(b.name); //Lisa
因為這是一個物件,它不會建立一個新的記憶體位址給b,所以a與b都指向同一個物件,a改值b的值也會跟著改。
這就是物件的傳參考 by reference
參考文章:
你不可不知的 JavaScript 二三事#Day26:程式界的哈姆雷特 —— Pass by value, or Pass by reference?
EDUCBA JavaScript Pass By Value