iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 16
0
自我挑戰組

前端工程師的30份套餐系列 第 16

Day16-by value 和 by reference

  • 分享至 

  • xImage
  •  

by value

當建立變數並給值時

var a = 3;
var b;
b = a;

接下來會發生什麼事?
你可以猜到 a會是3,b也是3
他們是對方的拷貝,在兩個不同的記憶體位置
這表示說,我可以改變a的值而不影響b
因為他們是記憶體中不同的兩點
那如果再把2給a呢?

var a = 3;
var b;
b = a;
a = 2;
console.log(a) //2
console.log(b) //3

a是2,b就是3,因為b只是a的拷貝,他有自己的記憶體位置,所以當我再次改變a,他不會對b有人任何影響,這就是 by value

by reference

var x = { content: '可以吃飯囉!' };
var y;
x = y;
console.log()

等號運算子知道他x是物件,所以不會建立一個新的記憶體位址給y,而是把y指向何x相同的記憶體位址,所以x和y是一樣的值,但他們不是對方值的拷貝,只是指向同一個記憶體位址
那如果這時候改變屬性的值呢?

y.content = '我吃飽了!'
console.log(x);
console.log(y);

x和y分別是什麼呢?
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

console.log(x); //Object {content:'我吃飽了!'}
console.log(y); //Object {content:'我吃飽了!'}
前面有說過~他們都指向同一個記憶體,所以改變了該物件的值,用了什麼名稱不重要,他們只是別名而已

由於物件指向同一個位址,一旦改變了其中一個,另一個也會跟著改變

如果使用函式的參數時也一樣,盡管式參數,物件也會經由參考(by reference)被傳入

今日重點:
純值是by value
物件是by reference

如果不懂這些觀念,會導致一些問題
一些很難debug的問題,只要弄清楚就簡單多了
參考:udemy-克服JS的奇怪部分


上一篇
Day15-ES6 Module語法
下一篇
Day17-物件實體和JSON
系列文
前端工程師的30份套餐30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言