设置超时在循环时执行
setTimeout in do while loop
我尝试每 2 秒输出一次带有消息"hello"的警报框,但只有 5 次。所以我写了这段代码:
var counter = 1;
do {
setTimeout
(
function()
{
alert("hello");
counter++;
},
2000
);
} while( counter <= 5 );
但是我的页面每次都崩溃?为什么?在警报之间添加 2000 毫秒延迟的最佳方法是什么?
但是我的页面每次都崩溃?为什么?
因为计数器仅在回调中递增 - 循环可能会尝试在这段时间内运行数千次(如果不是数万次)并快速运行浏览器内存不足。更准确地说,正如评论中指出的那样,循环永远不会放弃对setTimeout
调用的控制 - 所以它永远不会被运行(不要太担心这里的区别 - 只要接受你的计数器没有增加)
在警报之间添加 2000 毫秒延迟的最佳方法是什么
仅在前一个完成时启动下一个。
function showHello(i){
if(i<5){
setTimeout
(
function()
{
alert("hello");
showHello(i+1)
},
2000
);
}
}
showHello(0);
相关:是否可以在Javascript中链接setTimeout函数?以及如何使setInterval在一段时间或多次操作后停止?
改用 setInterval:
var counter = 0; // setting the counter
var interval = setInterval(function(){ //setInterval does repeatedly what setTimeout only
//does once
counter++;
if(counter === 5){
clearInterval(interval); //if the counter reaches 5 (the times you asked
//for repeating the alert box) you clear the interval,
//stopping the loop
}
alert("hello");
}, 2000);
这是一个工作小提琴:https://jsfiddle.net/mwosm34x/
请改用setInterval
。
当计数器大于 5 时clearInterval()
。
var counter = 1;
var timer = setInterval(function () {
alert("hello "+counter);
counter++;
if (counter > 5) {
clearInterval(timer);
}
}, 2000);
相关文章:
- 未执行Ajax循环的Javascript之后的代码
- 虽然循环不执行或不循环
- 为什么AngularJS在每个摘要循环上都执行函数
- javascript代码不会在循环后执行
- Chrome浏览器“;挂起”;同时在循环中执行AJAX请求
- 当JSON数据=变量时,需要执行循环
- 如何优化这个jquery循环的执行时间
- 如何在Javascript中延迟for循环执行
- 我将如何在 for 循环中执行此操作
- 了解执行模型和事件循环
- for 循环/递归中的执行顺序
- 如何在完成完全执行函数后触发循环
- 执行在外循环的第一次迭代后停止
- jquery .each 循环来执行每个数组项,它们之间有延迟
- 首先执行循环外的代码
- 如何使用内函数的回调值执行循环
- 以连续的方式执行循环中的所有元素
- 当我执行循环时,AngularJs/Ajax索引正在改变
- 在变量内执行循环
- 在JavaScript中执行循环的最佳方式是什么