傳值(by value)/傳參考(by reference)
純值傳值 (by value)
設定一個新的變數b,令b=a,若為純值,b會指向一個拷貝的新的記憶體地點,填上相同的值,這個方式叫傳值。
var a = 3
var bb = a
a = 2console.log(a) // 2
console.log(b) // 3b是a的拷貝,它有自己的記憶體位址,所以當改變a,對b沒有任何影響
物件傳參考 (by reference)
沒有新的物件被創造,沒有物件的拷貝被創造,物件指向同一個位址,一旦改變其中一個,另一也會跟著變。故不論哪個名稱改變值,因為它們全都指向同一個記憶體位置,都會全體一起改變。
by reference (all objects, including functions)var c = {greeting:’hi’}var dd = c // 不會建立一個新的記憶體位置給d,而是把d指向和c相同的記憶體位置
c.greeting = 'hello' //mutateconsole.log(c) // hello
console.log(d) // hello_____by reference (even as parameters)function changeGreeting(obj){
obj.greeting = ‘Hola’}changeGreeting(d) //在fn中d的參考的記憶體空間之greeting值會變成Holaconsole.log(c) //Hola
console.log(d) //Hola
*例外情況
等號運算子=會設定一個新的記憶體空間,也就是一個新的記憶體位置。
//equals operator sets up new memory space (new address)設定c為一個新的值,會設定一個新的記憶體空間給c,放進那個值
d和c就不再指向同一個記憶體位置c = { greeting: 'howdy' } console.log(c) //howdy
console.log(d) //Hola* Mutate: to change something, 'Immutable' means it can't be changed