淘先锋技术网

首页 1 2 3 4 5 6 7

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