看起来JavaScript试图优化代码,因此如果我们想要在循环中使用以下代码用一维数组(smallArr
)的可变值填充多维数组(largeArr
):
largeArr = []
smallArr = []
for (i=0; i<2; i++)
{
smallArr[0]=i
smallArr[1]=2*i
largeArr[i]=smallArr
}
我们得到了一个意外的结果:
largeArr=[[1,2],[1,2]]
(应该是 [[0,0],[1,2]]
)。因此,Javascript 首先计算 smallArr
的值,然后才填充 largeArr
。
为了得到正确的结果,我们必须在循环中声明 smallArr
:largeArr = []
for (i=0; i<2; i++)
{
smallArr = []
smallArr[0]=i
smallArr[1]=2*i
largeArr[i]=smallArr
}
然后它按预期工作(largeArr=[[0,0],[1,2]]
)。
为什么会出现这种行为?