javascript - array push in a called function 如何更新 caller function 中的数组,该数组传递给 javascript 中的函数?

标签 javascript

Javascript 中,当我们将函数中定义的局部数组作为参数传递给另一个函数时,它将修改数组上游除非数组为空 例如对不同的函数说 foo bar

var foo = function() { 
  var x = [9];  //Array is not empty
  bar(x);
  console.log("x =>",x);
}; 
var bar = function(x) {x[0] = 1;};
foo(); // x => [1]

x => [1] 的输出,如果数组为空并在被调用函数 bar 中修改,则它不会更新调用函数中的数组

var foo = function(){ 
  var x = []; //Array is empty
  bar(x); 
  console.log("x =>",x); }; 
var bar = function(x) {x = [1];};
foo(); // x => []

但如果我们使用数组推送,为什么,它如何更新 foo 中的空数组?

var foo = function(){ var x = []; bar(x); console.log("x =>",x); }; 
var bar = function(x) {x.push(3);};
foo(); // x => [3]

最佳答案

bar 中,x = [1] 只是将一个新值 分配给变量 x。该变量是函数的局部变量,这对您用来传递参数的变量没有影响(假设您没有使用变量来传递值,而是文字,如 bar([1,2] );).

x.push(3) 另一方面, 分配新值。它就地修改数组。这是可行的,因为数组是可变的。

类似地,x[0] = 1; 通过将新值分配给数组的第一个位置来就地更改数组。

更简单的例子:

var foo = [1];
var bar = foo;

bar.push(2);
console.log(foo); // shows [1, 2]

bar = 42;
console.log(foo); // still shows [1, 2]

foobar 在开头引用同一个数组,因此您可以使用任一变量修改数组。稍后我们为 bar 分配一个新值。这对 foo 的值没有影响,它仍然引用数组。

是否将值传递给函数没有区别。


正如已经指出的,空数组和非空数组之间没有区别。您声称为第一个示例获得的结果不正确。输出将为 [9]

关于javascript - array push in a called function 如何更新 caller function 中的数组,该数组传递给 javascript 中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16307424/

相关文章:

javascript - Angular 2 无法在单个 HTML 标签中使用同一个变量两次?

javascript - 如何在将图像上传到服务器时传递多个值(使用 AngularJS 和 NodeJS 进行文件上传)?

javascript - setTimeout 作为 react setState 的回调?

javascript - 在 HOC 中使用 useState/Hooks 使用react导致错误 "Hooks can only be called inside of the body of a function component"

javascript - 如果另一个下拉列表选择发生更改,则重置一个下拉列表

javascript - 如何在 Canvas 上同时绘制图像和草图

javascript - 在函数开始时调用 ClearTimeout 不起作用

javascript - 使用 xpath 获取并打印出元素

javascript - 如何根据不同的设备使用悬停和单击?

javascript - 使用循环从 javascript 中的对象获取函数结果