JavaScript 地址傳遞
在 JavaScript 中,變量是按值傳遞還是按引用傳遞的?這是一個常見的問題,也是一個深入的問題。不過,簡短的答案是:JavaScript 變量是按值傳遞的。同時,JavaScript 對象是按引用傳遞的。
按值傳遞是指把變量復制給函數作為參數的過程。按引用傳遞是指把變量的地址(引用)復制給函數作為參數。
看一個例子:
let x = 10; function changeValue(v){ v = 20; } changeValue(x); console.log(x); // 10
輸出結果為 10,說明按值傳遞確實是把變量復制后傳遞的。
再來看一個例子:
let person = { name: "Tom" } function changeName(p){ p.name = "Jerry"; } changeName(person); console.log(person.name); // Jerry
輸出結果是 Jerry,說明按引用傳遞確實是把變量的地址復制后傳遞的。這里 p 和 person 指向同一個對象。
還有一個例子:
let a = [1, 2, 3]; function changeArray(arr){ arr.push(4); } changeArray(a); console.log(a); // [1, 2, 3, 4]
輸出結果是 [1, 2, 3, 4],說明按引用傳遞確實是把變量的地址復制后傳遞的。這里 arr 和 a 指向同一個數組。
總體來說,JavaScript 還是按值傳遞的,只有在處理對象和數組時才會出現按引用傳遞的情況。
參考鏈接:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Functions