筆記:深入探討 JavaScript 中的參數傳遞:call by value 還是 reference?


Posted by rockyooooooo on 2021-07-05

深入探討 JavaScript 中的參數傳遞:call by value 還是 reference?

參數傳遞

程式語言在傳遞參數的時候,一般分成兩種:

  1. Call By Value
  2. Call By Reference

Call By Value

傳遞的時候,把參數的傳過去,也就是直接拷貝一份一模一樣的,但跟原本的參數完全無關

function swap(a, b) {
    var temp = a
    a = b
    b = temp
}

var x = 5
var y = 10

swap(x, y)
console.log(x, y) // 5, 10

Call By Reference

傳遞的時候,傳的是參數的參考,改變 function 裡面的參數,外面的也會被影響

function add(obj) {
    obj.age++
}

var p1 = {age: 20}
add(p1)
console.log(p1.age) // 21

但其實 JavaScript 並沒有 Call By Reference,那怎麼解釋上面這個情況呢?

Call By Sharing

傳遞的時候,function 裡外的參數都是指向同一個物件,但若將 function 的參數重新賦值,外面的參數則不會被影響

function add(obj) {
    obj = {age: obj.age + 1}
}

var p1 = {age: 20}
add(p1)
console.log(p1.age) // 20

總結

JavaScript 只有 Call By Value,或者可以說 JavaScript 的 Primitive type 是 Call By Value,物件則是 Call By Sharing

參考資料

深入探討 JavaScript 中的參數傳遞:call by value 還是 reference?

tags: 筆記

#note #javascript







Related Posts

Unity 5.3 Native System Language

Unity 5.3 Native System Language

[Day 06] - Vault Built-in help and Auth

[Day 06] - Vault Built-in help and Auth

新手學 Command line 與 Git 的基本指令

新手學 Command line 與 Git 的基本指令


Comments