我不希望 foo 在此示例中发生任何更改,但是当我将其修改为函数中的数组时,它会更改参数。注意 foo 没有被 function1 改变...我猜是因为它没有直接修改参数???任何避免这种情况的帮助将不胜感激。
http://jsfiddle.net/t47kD/ http://jsfiddle.net/t47kD/
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) https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice(在某些现代引擎中,您可以省略0
). See 这个答案 https://stackoverflow.com/a/7486130/772035关于复制数组。
另请参阅这个答案 https://stackoverflow.com/a/3638034/772035举一些例子。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)