2012-08-06 158 views
5

請看下面的例子: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

回答

13
alertBox() 

這是否看起來像一個直接函數調用?

嘗試傳遞函數(但不執行),而不是:

setInterval(alertBox, 5000); 
11

它因爲你正在執行的功能,而不是傳遞一個函數對象。

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