---
# System prepended metadata

title: '[學習筆記] Javascript 傳值&傳參考'

---

# [學習筆記] Javascript 傳值&傳參考
### :small_blue_diamond: 傳值&傳參考

在程式設計中，「傳值（**pass by value**）」和「傳參考（**pass by reference**）」是描述變數在函數調用時如何傳遞的兩種不同方式。

#### 1. 傳值（pass by value）：
當使用傳值的方式傳遞變數時，實際上是將變數的值複製一份，並將這份複製的值傳遞給函數。

在函數內部對該參數進行修改不會影響到原始變數。

```javascript!
function changeValue(value) {
  value = 10;
}

let num = 5;
changeValue(num);
console.log(num); // 結果: 5

在這個例子中，num 變數被傳值傳遞給 changeValue 函數。
儘管在函數內部將 value 設置為 10，但這不會影響到原始的 num 變數，因為它們是兩個獨立的拷貝。
```
:::warning
**傳值 (pass by value)** 是將變數的值複製一份傳遞給函數，對該參數的修改不會影響到原始變數。
:::

#### 2. 傳址/傳參考（pass by reference）：
當使用傳參考的方式傳遞變數時，實際上是將變數的引用（記憶體地址）傳遞給函數。

這意味著在函數內部對該參數的修改會影響到原始變數。

```javascript!
function changeArray(arr) {
  arr.push(4);
}

let numbers = [1, 2, 3];
changeArray(numbers);
console.log(numbers); // 結果: [1, 2, 3, 4]

在這個例子中，numbers 陣列被傳參考傳遞給 changeArray 函數。
在函數內部對 arr 進行修改，添加了 4，這也同時改變了原始的 numbers 陣列。

需要注意的是，JavaScript 中的物件（包括陣列和物件字面量）傳遞的方式是傳參考，而基本數據類型（例如數字、字串、布林值）則是傳值。
```
:::warning
**傳址/傳參考 (pass by reference)** 是將變數的引用（記憶體地址）傳遞給函數，對該參數的修改會影響到原始變數。
:::
