的Javascript环路与警报
问题描述:
您好我很困惑与alert
和console.log
的Javascript环路与警报
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,但是当我改变控制台。记录(count [i])以提醒(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。
答
两个版本都显示相同的内容。
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
,i == 2
),显示count[0]
(2),count[1]
(3),和count[2]
(4)。
回复您的评论:
我的意思是,当我尝试在JS斌(警报类型),它只会在第一,第二和第三个呼叫警报2
啊!你遇到了JSBin的“无限循环保护”。如果你运行它here,并期待在Web控制台,你会看到
在第5行退出潜力无限循环要禁用环路保护:加“// noprotect”你的代码
...但是如果您运行the output page of that,则会显示完整结果。
的alert
版本触发了开发模式的无限循环的保护,因为它看到相同的代码发生不止一次,但100ms以上的间隔(因为当您关闭alert
延迟)更多。
附注:上述内容不会造成问题,但代码正在沦为[隐式全局的恐怖](http://blog.niftysnippets.org/2008/03/horror-of-implicit- globals.html)*(这是我贫血的小博客上的一篇文章)*。在'iterate'中声明'i'。 –
我很困惑,怎么样?我认为警报输入计数数组的元素,每当我调用该函数,数组的长度将增加 –
我的意思是当我在JS Bin(警报类型)中尝试它时,它会在第一个,第二个和第三个电话 –