JavaScript setInterval和setTimeout

JavaScript setInterval和setTimeout,javascript,settimeout,setinterval,Javascript,Settimeout,Setinterval,下一个代码每1秒显示一次日期,然后停止 (function() { var i = setInterval(function() { console.log(new Date()); }, 1000); console.log("Hi"); setTimeout(function() { clearInterval(i); }, 3000); console.log("Hola"); })(); 输出: Hi H

下一个代码每1秒显示一次日期,然后停止

(function() {
    var i = setInterval(function() {
        console.log(new Date());
    }, 1000);
    console.log("Hi");

    setTimeout(function() {
        clearInterval(i);
    }, 3000);
    console.log("Hola");
})();
输出:

Hi
Hola
Wed Oct 24 2012 13:35:27 GMT+0200 (CEST)
Wed Oct 24 2012 13:35:28 GMT+0200 (CEST)
Wed Oct 24 2012 13:35:29 GMT+0200 (CEST)
但是我不知道为什么首先显示
Hi
Hola
。另外,为什么执行
setTimeout
?不应假定
setInterval
每1秒执行一次,并且不能执行任何其他操作?。(上面的代码是否按照编写顺序运行?)
谢谢。

所有的
setTimeout()
setInterval()
都会执行。 这不是
sleep()
PHP的方法。。。可悲


但是,此链接可能很有用:

setTimeout
以及
setInterval
仅注册函数(回调),然后直接转到下一个命令

因此,在调用第一次回调之前,将打印
Hi
Hola

第一次回调将在1秒后调用
setInterval
,然后在2秒后再次调用。。3秒钟后
setTimeout
启动并清除
setInterval


这两个事件是异步的。它们在下一个可用时刻排队/执行,而不是在调用“setTimeout”或“setInterval”的确切时间。

注释显示了执行顺序

(function() {                           // 0 anonymous function is called inline

    var i = setInterval(function() {    // 1 setInterval **schedules** the function 
                                        //     parameter to be executed every second
        console.log(new Date()); 
    }, 1000);
    console.log("Hi");                  // 2 Display 'Hi' on console

    setTimeout(function() {             // 3 **Schedule** the function parameter to 
                                        //     execute after three seconds
        clearInterval(i);     
    }, 3000);
    console.log("Hola");                // 4 Display 'Hola' on console
})();

                                        // 5 Display date from setInterval function

                                        // 6 Display date from setInterval function

                                        // 7 Display date from setInterval function

                                        // 8 Cancel setInterval executed from 
                                        //     setTimeout function

希望这能消除您的困惑。

所有代码都会立即运行。否
setInterval
setTimeout
立即返回,您的功能将继续。其他代码的执行将在稍后超时时中断,以执行您为这些调用提供的代码。@sje397运行代码的执行将不会暂停。相反,如果javascript正在运行,则定时事件会延迟。@Jan Dvorak你每天都会学到一些东西:)谢谢。这个链接可能会很有用@Enrmac Yeah。你可以处理一段时间过去的事实。我在那篇文章的前几段中两次提到它们不是在一个单独的线程中执行的。实际上不是另一个线程,因为JavaScript引擎是单线程的,但是链接是一个很好的洞察