我不希望 foo 在这个例子中发生任何改变,但是当我在函数中将其修改为数组时,它会更改参数。注意 foo 没有被 function1 改变...我猜是因为它没有直接修改参数???任何避免这种情况的帮助将不胜感激。
var foo = [1,2,3];
bar = function1(foo);
bar = function2(foo);
bar = function3(foo);
function function1(newFoo){
newFoo = [newFoo,'a',1];
return newFoo;
} //foo after function1 = 1,2,3
function function2(newFoo){
newFoo[0] = 'a';
return newFoo;
} //foo after function2 = a,2,3
function function3(newFoo){
newFoo.push('4');
return newFoo;
} //foo after function3 = a,2,3,4
最佳答案
对象(包括数组)在 ECMAScript 中通过引用分配。因此,当您修改函数中的数组时,您修改的是传递给函数的同一个数组,而不是数组的新副本。
执行数组浅拷贝的快速方法是使用 slice(0)
(在某些现代引擎中,您可以省略 0
)。请参阅this answer关于复制数组。
另请参阅this answer举一些例子。
关于javascript - 为什么我的函数在修改数组时会更改参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21119222/