JavaScript setTimeout()不会等待执行?

时间:2012-08-06 23:59:23

标签: javascript callback settimeout setinterval

考虑以下示例:

<script type="text/javascript">
    function alertBox(){
        alert('Hello World!');
    }
    function doSomething(){
        setInterval(alertBox(), 5000); //This is for generic purposes only
    };
    function myFunction(){
        setTimeout(doSomething(),3000);
    };

    myFunction();
</script>

是什么导致它执行 IMMEDIATELY ,而不是等待3秒设置,以及仅执行警报 ONCE < / em> ,而不是按预定的5秒间隔?

感谢您提供的任何帮助!

梅森

3 个答案:

答案 0 :(得分:16)

alertBox()

这看起来不像是一个即时函数调用吗?

尝试传递函数(不执行它):

setInterval(alertBox, 5000);

答案 1 :(得分:11)

因为您正在执行该函数,而不是传递函数对象。

function myFunction(){
    setTimeout(doSomething, 3000); // no () on the function
};

答案 2 :(得分:0)

以下代码执行不同,

setTimeout(console.log('Nuwan'),0)---(A); and 
setTimeout(function(){console.log('Nuwan'),0}) --- (B)

原因是当(B)执行时,javascript运行时中的CallStack将setTimeout()推送到Web API, WebAPI等待0秒钟将回调函数推送到事件队列,然后在当前堆栈为空后,EventLoop将回调推送到堆栈。

在情况(A)中,console.log()直接调用,因为它在WepAPI中,因此无需执行事件循环。

更多参考: WebAPI:https://developer.mozilla.org/en-US/docs/Web/API/Console_API Javascript运行时和事件循环:https://cybrohosting.com/knowledgebase/17/How-JavaScript-works-in-browser-and-node.html