您好我对alert
和console.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。
答案 0 :(得分:1)
两个版本都显示相同的内容。
count
开始为空。
在第一次通话时,您将2
推送到count
,使其为[2]
,然后只循环一次(i == 0
),输出count[0]
(这是2)。
在第二个电话中,您将3
推入count
,使其中包含[2, 3]
,然后循环两次(i == 0
,i == 1
), count[0]
(2)和count[1]
(3)。
在第三个电话中,您将4
推入count
,因此其中包含[2, 3, 4]
,并循环三次(i == 0
,i == 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
时的延迟)。