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

sha*_*ias 2 javascript arrays for-loop

给出以下代码:

var tmp = [0];
for(var i=0;i<100;i++) {
  tmp[0] = i;
  console.log(tmp);
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

Jos*_*hua 7

console.log(tmp[0])
Run Code Online (Sandbox Code Playgroud)

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