📜  JavaScript 中按值调用与按引用调用(1)

📅  最后修改于: 2023-12-03 14:42:29.955000             🧑  作者: Mango

JavaScript 中按值调用与按引用调用

在 JavaScript 中,函数的参数传递可以按值调用或按引用调用。理解它们的区别对于编写高效的代码非常重要。

按值调用

按值调用是指将实际参数的值复制一份,然后传递给函数中的形式参数。在函数内部对形式参数进行修改不会影响到实际参数。

function modifyValue(num) {
  // 修改形式参数
  num = num + 1;
  console.log(num); // 输出 6
}

var myNum = 5;
modifyValue(myNum); // 传递实际参数
console.log(myNum); // 输出 5

在上面的例子中,形式参数 num 被修改为原值加一,但实际参数 myNum 的值保持不变。这是因为 num 在函数内部创建了一个新的变量副本。

按引用调用

按引用调用是指将实际参数的引用传递给函数中的形式参数。在函数内部对形式参数进行修改会同时修改实际参数。

function modifyArray(arr) {
  // 修改形式参数
  arr.push(4);
  console.log(arr); // 输出 [1, 2, 3, 4]
}

var myArr = [1, 2, 3];
modifyArray(myArr); // 传递实际参数
console.log(myArr); // 输出 [1, 2, 3, 4]

在上面的例子中,形式参数 arr 是对实际参数 myArr 的引用。因此,对 arr 进行修改会修改原始数组 myArr

需要注意的是,在按引用调用时,如果将形式参数重新分配为另一个对象,它不会影响到实际参数自身。

function modifyObject(obj) {
  // 修改形式参数
  obj = {};
  obj.name = "John";
  console.log(obj); // 输出 { name: "John" }
}

var myObj = { name: "Alice" };
modifyObject(myObj); // 传递实际参数
console.log(myObj); // 输出 { name: "Alice" }

在上面的例子中,形式参数 obj 被重新分配为一个新的空对象,但实际参数 myObj 保持不变。

小结

在 JavaScript 中,按值调用和按引用调用对于函数参数传递起着重要作用。了解它们的区别可以帮助你避免出现意料之外的结果。

  • 按值调用:形式参数是实际参数的副本,对形式参数的修改不会影响到实际参数。
  • 按引用调用:形式参数是实际参数的引用,对形式参数的修改会同时修改实际参数。

根据不同的需求选择适当的参数传递方式是编写高效和可靠代码的关键。