iT邦幫忙

2021 iThome 鐵人賽

DAY 12
0
自我挑戰組

開始入坑網頁吧!系列 第 12

JavaScript | By value V.S. By reference(傳值 V.S. 傳參考)

  • 分享至 

  • xImage
  •  

傳值 (By value)

針對一個變數的純值(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

傳參考(By reference)

針對所有物件(包含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


上一篇
JavaScript Hoisting (提升)
下一篇
JavaScript This
系列文
開始入坑網頁吧!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言