我有一个基本功能,它创建一个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
等于空数组,该函数是否正在访问新的存储库?
提前感谢您的帮助!
答案 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循环中移动它会使代码工作:你为循环的每次迭代创建一个新的数组对象。