在 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]
foo
和 bar
在开头引用同一个数组,因此您可以使用任一变量修改数组。稍后我们为 bar
分配一个新值。这对 foo
的值没有影响,它仍然引用数组。
是否将值传递给函数没有区别。
正如已经指出的,空数组和非空数组之间没有区别。您声称为第一个示例获得的结果不正确。输出将为 [9]
。
关于javascript - array push in a called function 如何更新 caller function 中的数组,该数组传递给 javascript 中的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16307424/