### 🔍小範例大學問👊
# [<font color="#f00">JavaScript</font>] by reference(傳址)與by value(傳值)的異同
## 1. 基本定義
* by value(傳值):傳遞的是「數值的複製」。
* by reference(傳址):傳遞的是「記憶體的位置。
## 2. by value(傳值)
```javascript=
let a = 1;
b = a;
console.log(a, b);// 1 1
let b = 2;
console.log(a, b);// 1 2
```

💬說明:基本型別 (Primitive type),在 Javascript 皆是以by value (傳值) 的方式傳遞。
## 💡 基本型別:
1. Number:數字
2. String:字串
3. Boolean:布林
4. Undefined:未定義
5. Null:空值
6. Symbol:符號
=============>[*MDN資料型別*](https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Data_structures#%E8%B3%87%E6%96%99%E5%9E%8B%E5%88%A5)
## 3. by reference(傳址)
```javascript=
let c = ["前", "中", "後"];
let d = c;
console.log(c);//['前', '中', '後']
console.log(d);//['前', '中', '後']
d[0] = "超前";
console.log(c);//['超前', '中', '後']
console.log(d);//['超前', '中', '後']
d = ["改前", "改中", "改後"];
console.log(c);//['超前', '中', '後']
console.log(d);//['改前', '改中', '改後']
```

💬說明:物件型別,則會以 by reference (傳址)的方式傳遞。但有例外的情形,如果整個陣列全部異動時,就會新建記憶體位址。
```javascript=
let e = {
myName:"Peter",
myAge:20
};
let f = e;
console.log(e);//{myName: 'Peter', myAge: 20}
console.log(f);//{myName: 'Peter', myAge: 20}
f.myAge= 35;
console.log(e);//{myName: 'Peter', myAge: 35}
console.log(f);//{myName: 'Peter', myAge: 35}
f = {
myHome:"Taipei",
isSleep:true
};
console.log(e);//{myName: 'Peter', myAge: 35}
console.log(f);//{myHome: 'Taipei', isSleep: true}
```
💬說明:物件和陣列是相同的結果。
## 💡 物件型別:
1. Object:物件
2. Array:陣列
3. Function:函式
---
[[JavaScript] Javascript中的傳值 by value 與傳址 by reference](https://medium.com/itsems-frontend/javascript-pass-by-value-reference-sharing-5d6095ae030b)