javascript - 为什么有些操作不会改变传递给函数的数组?

标签 javascript arrays

场景 1:

var myArray = [2, 3, 4, 5];
function doStuff(arr) {
  arr = [];
}
doStuff(myArray);
console.log(myArray); // [2,3,4,5]

场景 2:

var myArray = [2, 3, 4, 5];
function doStuff(arr) {
  arr.pop();
}
doStuff(myArray);
console.log(myArray); // [2,3,4]

为什么场景 1 不更新全局声明的数组,而场景 2 会更新?

最佳答案

在第一个例子中:

您正在更改变量 arr,它只是持有对数组 [2, 3, 4, 5] 的引用,所以不是持有对数组的引用[2, 3, 4, 5],它将保存对另一个数组 [] 的引用。

var myArray = [2, 3, 4, 5]; 行:

myArray -----------------------------------> [2, 3, 4, 5]

然后在 doStuff(myArray); 行:

myArray -----------------------------------> [2, 3, 4, 5]
                                                  ↑
arr ----------------------------------------------/

然后在 arr = []; 行:

myArray -----------------------------------> [2, 3, 4, 5]

arr ---------------------------------------> []

=> 所以,在调用 doStuff 之后,myArray 仍然是 [2, 3 , 4, 5].

在第二个例子中:

您正在使用存储在 arr 中的对 [2, 3, 4, 5] 的引用来调用其上的函数 pop改变它。

var myArray = [2, 3, 4, 5]; 行:

myArray -----------------------------------> [2, 3, 4, 5]

然后在 doStuff(myArray); 行:

myArray -----------------------------------> [2, 3, 4, 5]
                                                  ↑
arr ----------------------------------------------/

然后在 arr.pop(); 行:

myArray -----------------------------------> [2, 3, 4, 5].pop()
                                                  ↑
arr.pop() ----------------------------------------/

将数组更改为:

myArray -----------------------------------> [2, 3, 4]
                                                  ↑
arr ----------------------------------------------/

=> 因此,在调用 doStuff 之后,myArray 现在是 [2, 3 , 4].

关于javascript - 为什么有些操作不会改变传递给函数的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46259273/

相关文章:

javascript - 使用行跨度在表格中垂直获取下一个表格单元格

javascript - trigger.io:自动完成文本框不起作用

javascript - 如何在 JavaScript 中将两个依赖数组缩减为一个对象?

c++ - 从数组包中删除元素或将其插入数组包中。为什么使用 bool 数组而不是int?

javascript - 随着框架的变化动态缩放 iFrame 内容

javascript - 底面布局

javascript - Reactjs: TypeError: 无法读取未定义的属性 'eventSlots'

jQuery 将对象值转换为数字

php - Laravel - 如何查询数据库中的数组字段是否包含值

Javascript数组过滤两个搜索框