### 傳值與傳參考的意義是什麼?
- **傳值**(Pass by Value)和 **傳參考**(Pass by Reference)是在程式設計中用來**描述函數或方法如何將參數傳遞給其他函數或方法的方式**。這兩者之間的**區別在於參數在傳遞過程中的內存管理方式**。
### 示例:
- 假設今天有一個 **a 變數** & **b 變數**
- b 是預計來拷貝資料 a 的變數。
```js
// Primitive value , Copy of primitive value
b = a;
(or pass to a function)
```
### by value
- 簡單來說,藉由傳值獲取的值,若原先指向的變數與值有改變
,當下這個值就不能被改變。
- 而這個案例只有在純值的情況下發生。[Primitive value](https://developer.mozilla.org/en-US/docs/Glossary/Primitive)
```js
// 假設 a = 3;
也就是說,b 會指向 3,而這個 3 就是拷貝的位置。(獲得與 a 相同的值)。
// 這是一個 by value 的示例
```
- **by value** 案例:
```js
let a = 1;
let b = a;
a = 3;
console.log(b); // b 沒有因為 a 中途改變值 = 3; 也跟著變化。
```
### by reference
- 所有的**物件**都是 **by refernece**。像是函數,函數在 JavaScript 也是物件。
- 開發時,**若兩個變數都指向同個物件**,假設 `a` 有變化,那拷貝變數 a 的 變數 `b` 則也會被影響。
```js
const obj = {
content: "hi,obj!",
};
let a = obj;
console.log("a", a);
// b 拷貝了 a
let b = a;
console.log("b", b);
a.content = `I m 'a',first change the value!`;
console.log(obj, a, b);
// obj - 不變 , b 因為受到 a 影響,所以值改變了。
```
### 純值代表了一個記憶體的位置。
- 因為上面的案例已經告訴你了,拷貝純值的話,後續來源值有變動,拷貝變數不會被影響到。
### by reference 不會創建一個記憶體,但會將拷貝變數指向同個記憶體位址
- [延伸參考文章](https://ithelp.ithome.com.tw/articles/10209104)
- [延伸參考教學](https://www.youtube.com/watch?v=r5rYoJFWfN0&t=1008s)