2012-03-07 71 views
0

数组复制我在遇到下一个代码问题:的JavaScript - 内部功能

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 

我已经与控制台检查:当我改变测试[i]在test2.push(test)之后,test2 [test2.length]也被改变。 (为什么?)

是否有范围问题? 我该怎么做才能得到这样的输出结果?

1,0 
0,1 

谢谢。

+1

'A = FUNC(试验); //这里测试的是什么??' – linuxeasy 2012-03-07 06:55:20

+0

Upsss ...纠正。这是test1。 – Atoso 2012-03-07 07:01:02

回答

2
test2.push(test); 

这不会创建您的测试数组的副本,只是将新的引用存储到您的输入数组中。所以你所有的函数都会存储对同一个输入参数的多个引用。如果要存储一个真实的副本使用:

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

@ user1150525,这两个答案都解决了我的问题。感谢:D – Atoso 2012-03-07 07:20:16

0

使用slice创建数组的一个副本:

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