Javascript循环与警报

时间:2017-04-17 14:55:23

标签: javascript jsbin

您好我对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);

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

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

1 个答案:

答案 0 :(得分:1)

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

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,{ {1}}),显示i == 2(2),count[0](3)和count[1](4)。

重新评论:

  

我的意思是当我在JS Bin(警报类型)中尝试时,它只会在第一次,第二次和第三次呼叫时提醒2

啊!您正在进入JSBin&#34;无限循环保护。&#34;如果您运行here并查看Web控制台,则会看到

  

在第5行退出潜在的无限循环。要禁用循环保护:添加&#34; // noprotect&#34;到你的代码

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

count[2]版本在开发模式下触发无限循环保护,因为它看到相同的代码发生多次但超过100毫秒(因为你忽略了alert时的延迟)。