---
# System prepended metadata

title: 什麼是by reference (傳參考)、by value(傳值)

---

> 如果有記憶吐司就好了...
# 什麼是by reference (傳參考)、by value(傳值)

### by reference(傳址)
當我們宣告一個變數為物件時`let a = {myName: "Jasper"};`,此時a會被存取到記憶體中的一個位置(ex:0*001),當我再宣告一個變數 `let b = a;`,此時b不會再記憶體中建立另一個位置來存放,而是將b的值指向a的記憶體(0*001),所以當a的值改變的時候b也會跟著變動,這種情況稱為 *by reference** ,此型態發生於object、function。
![](https://i.imgur.com/o0wdCVl.png)


### by value(傳值)
當我們宣告一個變數為 `let a = 1;`，此時a會在記憶體建立一個位置存取1(ex:0*001)。這時候我在宣告 `let b = a;`,此時b也會在記憶體建立另一個位置(ex:0*002)存取a的值。a與b各自存在不同的記憶體位置,此時當我再將a的值改為10,則b不會跟著變動,這樣的情況稱為 **by value** ,此型態發生於primitive type的變數(number、string、布林、undefined、null)。
![](https://i.imgur.com/zJvR8pQ.png)

參考文獻:
* https://codinggirl.timelog.to/a174653905
* https://wcc723.github.io/javascript/2017/12/06/javascript-variables/
* https://pjchender.blogspot.com/2016/03/javascriptby-referenceby-value.html
* https://iter01.com/548218.html
* https://ithelp.ithome.com.tw/articles/10103799