JavaScript setTimeout()不会等待执行?

问题描述:

请看下面的例子:JavaScript setTimeout()不会等待执行?

<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> 

是什么导致该执行立即,而不是等待3秒为单位设置,以及只执行警报ONCE,而比预定的5秒间隔?

感谢您提供任何帮助!

梅森

+4

好,**回调立即调用**(和* *结果传递给'setTimeout')..通过功能而不是。 – 2012-08-07 00:00:48

+1

这可能是SO上单个最被问到的javascript问题。 – jfriend00 2012-08-07 00:01:36

+0

@ jfriend00我觉得在循环中的变量可能会绑定它; ;-) – 2012-08-07 00:01:55

alertBox() 

这是否看起来像一个直接函数调用?

尝试传递函数(但不执行),而不是:

setInterval(alertBox, 5000); 

它因为你正在执行的功能,而不是传递一个函数对象。

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