Javascript 循环警报

Javascript loop with alert

嗨,我对 alertconsole.log

感到困惑

var count = [];

function iterate(number) {
  count.push(number);
  for (i = 0; i < count.length; i++) {
    console.log(count[i]);
  }
}

iterate(2);
iterate(3);
iterate(4);

控制台会给我 2,2,3,2,3,4 但是当我将 console.log(count[i]) 更改为 alert(count[i]);它只会重复 2 次 3 次,为什么?

var count = [];

function iterate(number) {
  count.push(number);
  for (i = 0; i < count.length; i++) {
    alert(count[i]);
  }
}

iterate(2);
iterate(3);
iterate(4);

上面不会做到这一点,但 on JSBin.

两个版本显示相同的内容。

count 开始为空。

在第一次调用时,您将 2 推入 count,因此它有 [2],然后只循环一次 (i == 0),输出 count[0](即 2)。

在第二次调用时,您将 3 推入 count,因此其中包含 [2, 3],然后循环两次(i == 0i == 1) , 显示 count[0] (2) 和 count[1] (3).

在第三次调用时,您将 4 推入 count,因此其中包含 [2, 3, 4],并循环三次(i == 0i == 1 , i == 2), 显示 count[0] (2), count[1] (3), 和 count[2] (4).


回复您的评论:

I mean when I try it in JS Bin(alert type), it will just alert 2 on the first ,2nd and 3rd call

啊!您正在 运行进入 JSBin 的 "infinite loop protection." 如果您 运行 它 here 并查看 Web 控制台,您会看到

Exiting potential infinite loop at line 5. To disable loop protection: add "// noprotect" to your code

...但是如果您 运行 the output page of that,它会显示完整的结果。

alert 版本在开发模式下触发了无限循环保护,因为它看到相同的代码不止一次发生但间隔超过 100 毫秒(因为你关闭 alert 时的延迟) ).