为什么在for循环中为数组赋值会导致数组在传递给console.log()时每次迭代具有相同的值?

时间:2010-08-09 05:11:03

标签: javascript arrays for-loop

给出以下代码:

var tmp = [0];
for(var i=0;i<100;i++) {
  tmp[0] = i;
  console.log(tmp);
}

我期望输出[0],[1],[2],[3]等

但我改为[99],[99],[99],[99]等

逐步调试调试器(firebug)中的代码然后让我知道[0],[1],[2]的正确结果。

2 个答案:

答案 0 :(得分:7)

console.log(tmp[0])

当你输入console.log(tmp)时,你正在记录整个数组对象。 Firebug只创建一个指向该对象的链接,然后当你“查看”firebug中的对象时,你正在查看它的当前状态(在for循环完成之后)。

答案 1 :(得分:0)

这很有趣。即使没有for循环:

var tmp = [], i = 0;
tmp[0] = i;
console.log(tmp);
i++;
tmp[0] = i;
console.log(tmp);

产生

[1]
[1]

......也是。我不知道console.log表现得那样。感谢@Joshua提供了一个很好的解释。