工作我使用下面暫停的JavaScript幾秒鐘:設置超時不與功能
setTimeout(start_countdown(),3000);
它不工作,無論秒的函數被調用。然而,下面的函數不起作用,它不使用函數。
setTimeout(alert('hi'),3000);
我該如何解決這個問題?
工作我使用下面暫停的JavaScript幾秒鐘:設置超時不與功能
setTimeout(start_countdown(),3000);
它不工作,無論秒的函數被調用。然而,下面的函數不起作用,它不使用函數。
setTimeout(alert('hi'),3000);
我該如何解決這個問題?
你需要傳遞一個函數引用。您正在傳遞函數的返回值。
區別在於:一個是您想要發生的功能的藍圖,另一個意味着您立即執行該功能並將其返回值傳遞給setTimeout
。
setTimeout(start_countdown, 3000);
如果你想要做一些更復雜的比簡單地調用名爲功能,或者你想設置了一個param傳遞給指定的功能,你需要,而不是通過一個匿名函數超時,並致電內的功能:
setTimeout(function() {
start_countdown(/* possible params */);
/* other code here as required */
}, 3000);
寫,而不是
setTimeout(start_countdown, 3000);
沒有括號()
第二個例子可以也寫成
setTimeout(function() { alert('hi'); }, 3000);
如果你不需要通過PARAMS不使用()
setTimeout(start_countdown,3000);
如果你有來包裝你的函數
setTimeout(function(){start_countdown(parameter)},3000);
在不同的瀏覽器中,它以不同的方式工作。在IE中,您需要使用匿名函數將參數傳遞給回調:
setTimeout(function(){alert('hi')},3000);
你能解釋爲什麼我們不應該添加括號作爲函數'setTimeout'的第一個參數?我注意到,如果我們添加'()',函數將立即觸發。這是爲什麼? 我不知道'setTimeout'實際上是如何工作的...... – Stallman 2013-07-28 15:11:56
'setTimeout'註冊一個異步事件,它將以您指定的毫秒數(大約)執行。它期望作爲第一個參數的一個函數 - 一個函數文字或一個對其他地方指定的引用。如果你在函數名後加上'()',那麼你實際上正在執行函數,然後不要求稍後調用該函數。您需要了解函數引用和函數調用之間的區別。 – Utkanos 2013-07-29 10:59:32