克服JS奇怪的部分_傳值和傳參考

Huang Pei
3 min readSep 16, 2019

--

傳值(by value)/傳參考(by reference)

本筆記出自:JavaScript 全攻略:克服 JS 的奇怪部分

純值傳值 (by value)

設定一個新的變數b,令b=a,若為純值,b會指向一個拷貝的新的記憶體地點,填上相同的值,這個方式叫傳值。

拷貝一個值到另一個不同的記憶體地點
var a = 3
var b
b = a
a = 2
console.log(a) // 2
console.log(b) // 3
b是a的拷貝,它有自己的記憶體位址,所以當改變a,對b沒有任何影響

物件傳參考 (by reference)

沒有新的物件被創造,沒有物件的拷貝被創造,物件指向同一個位址,一旦改變其中一個,另一也會跟著變。故不論哪個名稱改變值,因為它們全都指向同一個記憶體位置,都會全體一起改變。

by reference (all objects, including functions)var c = {greeting:’hi’}var dd = c // 不會建立一個新的記憶體位置給d,而是把d指向和c相同的記憶體位置
c.greeting = 'hello' //mutate
console.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

--

--

Huang Pei
Huang Pei

Written by Huang Pei

記錄用倉庫,歡迎指正。菜鳥前端,最菜的那種(超能力少女です)。

No responses yet