JavaScript中是否有睡眠功能?

Is there a sleep function in JavaScript?

本问题已经有最佳答案,请猛点这里访问。

javascript中有睡眠功能吗?


如果您希望通过调用sleep来阻止代码的执行,那么不,JavaScript中没有这种方法。

JavaScriptsetTimeout方法。setTimeout允许您将函数的执行延迟x毫秒。

1
2
3
4
setTimeout(myFunction, 3000);

// if you have defined a function named myFunction
// it will run after 3 seconds (3000 milliseconds)

记住,这与sleep方法(如果存在)的行为完全不同。

1
2
3
4
5
6
7
8
function test1()
{    
    // let's say JavaScript did have a sleep function..
    // sleep for 3 seconds
    sleep(3000);

    alert('hi');
}

如果运行上述函数,则必须等待3秒钟(sleep方法调用被阻塞),然后才能看到警报"hi"。不幸的是,在JavaScript中没有类似的sleep功能。

1
2
3
4
5
6
7
8
9
10
11
function test2()
{
    // defer the execution of anonymous function for
    // 3 seconds and go to next line of code.
    setTimeout(function(){

        alert('hello');
    }, 3000);  

    alert('hi');
}

如果运行test2,您将立即看到"hi"(setTimeout是非阻塞的),3秒钟后,您将看到警报"hello"。


您可以使用setTimeoutsetInterval功能。


如果运行上述函数,则必须等待3秒钟(睡眠方法调用被阻塞)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
function myFunction(){
       doSomething();
       sleep(500);
       doSomethingElse();
    }


<html>
  <head>
    <script type="text/javascript">
      /**
       * Delay for a number of milliseconds
       */

      function sleep(delay) {
        var start = new Date().getTime();
        while (new Date().getTime() < start + delay);
      }
   
  </head>
  <body>
    Eureka!
      <script type="text/javascript">
        alert("Wait for 5 seconds.");
        sleep(5000)
        alert("5 seconds passed.");
     
  </body>
</html>


1
2
3
4
function sleep(delay) {
    var start = new Date().getTime();
    while (new Date().getTime() < start + delay);
}

此代码在指定的持续时间内阻塞。这是占用CPU的代码。这与线程阻塞自身并释放另一个线程使用的CPU周期不同。这里没有发生这种事。不要使用此代码,这是一个非常糟糕的主意。