103

我想停止执行 2 秒钟。这也是如此,但现在遵循一个代码块:

<html>
   <head>
      <title> HW 10.12 </title>
      <script type="text/javascript">
         for (var i = 1; i <= 5; i++) {
             document.write(i);
             sleep(2); //for the first time loop is excute and sleep for 2 seconds        
         };
      </script>
   </head>
   <body></body>
</html>

第一次循环执行并休眠 2 秒。我想停止执行两秒钟?

4

5 回答 5

138

Javascript 是单线程的,所以本质上不应该有睡眠功能,因为睡眠会阻塞线程。setTimeout是一种通过将事件发布到队列以便稍后执行而不阻塞线程来解决此问题的方法。但是如果你想要一个真正的睡眠函数,你可以这样写:

function sleep(miliseconds) {
   var currentTime = new Date().getTime();

   while (currentTime + miliseconds >= new Date().getTime()) {
   }
}

注意:推荐使用上述代码。

于 2013-05-18T12:11:40.093 回答
67

没有(安全的)方法可以暂停执行。但是,您可以使用setTimeout执行以下操作:

function writeNext(i)
{
    document.write(i);

    if(i == 5)
        return;

    setTimeout(function()
    {
        writeNext(i + 1);

    }, 2000);
}

writeNext(1);
于 2013-05-18T11:45:37.580 回答
46

您可以使用它setTimeout来执行此操作

function myFunction() {
    // your code to run after the timeout
}

// stop for sometime if needed
setTimeout(myFunction, 2000);
于 2013-05-18T11:44:12.167 回答
6

此链接可能对您有所帮助。

每次我想在我的函数中间睡觉时,我都重构为使用 setTimeout()。

于 2013-05-18T11:48:17.113 回答
4

没有办法像使用过程语言那样停止代码的执行。您可以改为使用 setTimeout 和一些技巧来获得参数化超时:

for (var i = 1; i <= 5; i++) {
    var tick = function(i) {
        return function() {
            console.log(i);
        }
    };
    setTimeout(tick(i), 500 * i);
}

在这里演示:http: //jsfiddle.net/hW7Ch/

于 2013-05-18T11:54:33.550 回答