以asynchronous方式填充数组

我有两个数组,填充其中的一个随机数字:

var arr1 = [1]; var arr2 = []; function arr1Filler() { arr2 = arr1; setTimeout(function() { for (var i = 0; i < 3; i++) { arr1[i] = Math.floor(Math.random()*5); } console.log('array 1:'); console.log(arr1); console.log('array 2:'); console.log(arr2); }, 500); } setInterval(arr1Filler, 1000); 

在这个例子中,为什么这两个数组总是相等的。 换句话说,为什么我得到这样的东西:

 array 1: [ 3, 0, 1 ] array 2: [ 3, 0, 1 ] array 1: [ 0, 2, 3 ] array 2: [ 0, 2, 3 ] array 1: [ 1, 2, 4 ] array 2: [ 1, 2, 4 ] 

而不是像这样的结果(数组2的最后一个值是数组1的新值):

 array 1: [ 1 ] array 2: [ 3, 0, 1 ] array 1: [ 3, 0, 1 ] array 2: [ 0, 2, 3 ] array 1: [ 0, 2, 3 ] array 2: [ 1, 2, 4 ] 

我该怎么做才能得到我期待的第二个结果?

它们是相同的,因为您在这里将数组设置为相同的对象:

 arr2 = arr1; 

所以当你添加到arr1arr2总是相同的。 你想要的是一个arr1副本 。 您可以使用slice来有效地创build一个数组的副本。

 arr2 = arr1.slice(); 
 var arr1 = [1]; var arr2 = []; function arr1Filler() { arr2 = arr1.slice(); setTimeout(function() { for (var i = 0; i < 3; i++) { arr1[i] = Math.floor(Math.random()*5); } console.log('array 1:'); console.log(arr1); console.log('array 2:'); console.log(arr2); }, 500); } setInterval(arr1Filler, 1000);