javascript - 复制内部函数的数组

时间:2012-03-07 06:52:57

标签: javascript arrays scope copy

我遇到下一个代码的问题:

test1 = [0,0];
function func(test)
{
    var test2 = new Array();
    for(var i = 0; i < test.length; i++)
    if(test[i] == 0)
    {
        test[i] = 1;
        test2.push(test);
        test[i] = 0;
    }
    return test2;
}
a = func(test1);
document.write(a[0].toString()+"<br/>");
document.write(a[1].toString());

,输出为:

0,0
0,0

我已经使用控制台进行了检查:当我在条件内更改test [i]时,在test2.push(test)之后,test2 [test2.length]也会发生变化。 (为什么?)

是否存在范围问题? 我该怎么做才能获得这样的输出?

1,0
0,1

感谢。

2 个答案:

答案 0 :(得分:2)

  test2.push(test);

这不会创建测试数组的副本,而只是存储对输入数组的新引用。所以你的所有功能都是存储对同一输入参数的大量引用。如果您想存储真实副本,请使用:

 test2.push( test.slice(0) );

答案 1 :(得分:0)

使用slice创建数组副本:

var a = [1,2,3]
var b = a.slice();
b[0] = 0;
a[0] == 1;