JavaScript:by referenc(傳參考、傳址)與 by value(傳值)差異

今天來探討 JavaScript 中,by referenc(傳參考)與 by value(傳值)差異。

by value(傳值)

  • 宣告 a 變數後,再宣告變數 b 並將 a 值賦予值給變數 b
  • 然而要將 a 值賦予值到變數 b 時,會額外開新的記憶體空間
  • 因此變數 a 與變數 b 是不同的記憶體空間,彼此沒有關聯
  • 所以後續儘管進行 b++; 運算也不會影響到變數 a
1
2
3
4
let a = 1;
let b = a;
b++;
console.log(a, b); // output: 1 2

by reference(傳參考、傳址)

  • 宣告 a 變數後,再宣告變數 b 並將 a 值賦予值給變數 b
  • 但因為兩者皆是物件,物件本身有個記憶體空間,因此 a 變數與 b 變數會指向到同一個物件記憶體空間
  • 賦予新值給 b.name,此時 a.name 的結果也會被修改
  • 原因是因為 a 與 b 變數都指向同一個記憶體空間物件
  • 因此不論修改哪個變數裡面的屬性,都是針對同一個記憶體空間修改
  • 陣列內的 value 也會跟物件一樣有傳參考特性
1
2
3
4
5
6
const a = {
name: 'apple',
}
const b = a;
b.name="banana";
console.log(a.name, b.name); // output: banana banana

參考資料


希望我的文章能夠幫助到你,有任何問題或是想與我討論交流,歡迎透過留言與我分享你的觀點。

如果你喜歡我的文章,想支持我繼續撰寫更多文章,歡迎你:

  1. 將我的部落格加入書籤,隨時造訪部落格。
  2. 將我的文章分享給你的親朋好友。
  3. 透過 LikeButton 幫我按 5 下讚。
  4. 每月贊助 LikeCoin 請我喝杯咖啡。(雖然我不喝咖啡啦 XD)