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