参数传递:值传递 vs 引用传递
2023-09-14 06:28:10
值传递
在JavaScript中,当我们把一个变量的值传递给函数时,其实就是把这个变量的值复制一份给函数的形参。这意味着函数内部对形参的任何修改都不会影响到函数外部的实参。
举个例子:
function add(a, b) {
a = a + 1;
b = b + 1;
}
let x = 1;
let y = 2;
add(x, y);
console.log(x); // 1
console.log(y); // 2
在这个例子中,函数add()被调用时,参数x和y的值分别被复制给了形参a和b。函数内部对a和b的修改不会影响到函数外部的x和y的值。
引用传递
在JavaScript中,引用传递是指把一个变量的引用传递给函数,而不是把变量的值传递给函数。这意味着函数内部对形参的任何修改都会影响到函数外部的实参。
在JavaScript中,引用传递只对对象有效。当我们把一个对象作为参数传递给函数时,函数内部对这个对象的任何修改都会影响到函数外部的这个对象。
举个例子:
function addProperty(obj) {
obj.newProperty = 'value';
}
let person = {
name: 'John',
age: 30
};
addProperty(person);
console.log(person); // { name: 'John', age: 30, newProperty: 'value' }
在这个例子中,函数addProperty()被调用时,参数obj被赋予了person对象的引用。函数内部对obj的修改也会影响到函数外部的person对象。
值传递和引用传递的区别
值传递和引用传递的区别在于:
- 值传递:把变量的值复制一份给函数的形参,函数内部对形参的任何修改都不会影响到函数外部的实参。
- 引用传递:把变量的引用传递给函数,函数内部对形参的任何修改都会影响到函数外部的实参。
何时使用值传递,何时使用引用传递?
在JavaScript中,值传递是默认的传递方式。只有在需要修改函数外部的变量时,才使用引用传递。
一般来说,如果函数只需要使用参数的值,而不需要修改参数的值,那么就应该使用值传递。如果函数需要修改参数的值,那么就应该使用引用传递。
例如,如果我们想创建一个函数来计算两个数的和,那么我们应该使用值传递。因为我们只需要使用这两个数的值,而不需要修改这两个数的值。
function sum(a, b) {
return a + b;
}
let x = 1;
let y = 2;
let result = sum(x, y);
console.log(result); // 3
在这个例子中,函数sum()被调用时,参数x和y的值分别被复制给了形参a和b。函数内部对a和b的修改不会影响到函数外部的x和y的值。
如果我们想创建一个函数来修改一个对象,那么我们应该使用引用传递。因为我们需要修改这个对象的值。
function addProperty(obj) {
obj.newProperty = 'value';
}
let person = {
name: 'John',
age: 30
};
addProperty(person);
console.log(person); // { name: 'John', age: 30, newProperty: 'value' }
在这个例子中,函数addProperty()被调用时,参数obj被赋予了person对象的引用。函数内部对obj的修改也会影响到函数外部的person对象。
结论
JavaScript中的参数传递有两种方式:值传递和引用传递。值传递是默认的传递方式,只有在需要修改函数外部的变量时,才使用引用传递。