do while循环中的setTimeout

Bla*_*ack 1 javascript while-loop settimeout

我尝试每隔2秒输出一个警告框,其中包含"hello"消息,但只有5次.所以我写了这段代码:

var counter = 1;

do {
    setTimeout
    (
        function()
        {
             alert("hello");
             counter++;
        },
        2000
    );
} while( counter <= 5 );
Run Code Online (Sandbox Code Playgroud)

但我的页面每次都在崩溃?为什么?什么是在警报之间添加延迟2000毫秒的最佳方法?

Jam*_*iec 5

但我的页面每次都会崩溃?为什么?

因为计数器仅在回调内递增 - 循环可能会尝试在该时间内运行数千次(如果不是数万次)并快速运行浏览器内存不足.更准确地说,正如注释中所指出的,循环永远不会放弃对setTimeout调用的控制- 因此永远不会运行(不要过分担心这里的区别 - 只是接受你的计数器没有递增)

什么是在警报之间添加2000毫秒延迟的最佳方法

只有在前一个完成后启动下一个.

function showHello(i){
  if(i<5){
    setTimeout
    (
        function()
        {
             alert("hello");
             showHello(i+1)
        },
        2000
    );
  }
}

showHello(0);
Run Code Online (Sandbox Code Playgroud)

相关:可以在Javascript中链接setTimeout函数吗?以及如何在一段时间后或多次操作后停止setInterval?

  • "在那段时间" - 它甚至没有达到那一点.JS事件循环太忙于运行`while`以查看是否有任何计时器用完,因此它永远不会达到超时功能. (2认同)