10乘10阵列 - 以前的阵列被覆盖

时间:2016-01-19 03:25:03

标签: javascript arrays

我有一个基本功能,它创建一个10乘10的数组,其中随机D和E为值。我的代码如下:

<div class='foo'>
<span class='bar'>one</span>
<span class='bar'>two</span>
</div>

执行此操作时,输出显示10个具有相同10个值的数组。似乎function tenByTen(){ var outerArr = []; var arrInArr = []; for(var i = 0; i < 10; i++){ for(var j = 0; j < 10; j++){ if((Math.floor(Math.random() *10) +1) % 2 == 0){ arrInArr[j] = ("D"); } else { arrInArr[j] = ("E"); } } outerArr[i] = arrInArr; } return outerArr; } 中的值被覆盖,但为什么新值会更新arrInArr中已有的数组?

如果我在outerArr下面添加arrInArr = [],则该功能会按预期运行。任何人都可以解释为什么会这样吗?是因为通过重新声明arr[i] = arrInArr等于空数组,该函数是否正在访问新的存储库?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

有两种误解导致你的困惑。首先是你在做:

NEW_OBJECT               =     Person(name)
    ^                            ^
I have no idea how to        I know exactly how to make this
make this

我认为,既然你这样做了,你就假定你将outerArr[i] = arrInArr; 的值分配给arrInArr。然而,这种情况并非如此。你要意识到的是outerArr[i]是一个指向数组的指针。因此,上面的代码只是将对arrInArr的引用复制到arrInArr。只有一个outerArr[i]因此它们都指向同一个数组。

其次,你似乎相信这一点:

arrInArr

仅仅是声明一个数组变量。您似乎忽略的是var arrInArr = []; 符号后面的代码。上面的代码完全相同:

=

因此,它不仅仅是声明一个变量,而且还创建了一个数组对象。这解释了为什么在for循环中移动它会使代码工作:你为循环的每次迭代创建一个新的数组对象。