它可能調用'一些'正常代碼執行後?但我不確定...如果有足夠的一種足以描繪JavaScript代碼在瀏覽器中執行的大圖的話,那將是非常棒的。何時使用setTimeout註冊的函數被調用?
0
A
回答
1
對於大部分時間瀏覽器執行線程爲空閒,沒有運行任何代碼。當您使用setTimeout
註冊某個要執行的函數時,它將在給定的毫秒數之後執行。
現在:如果在給定的時間量之後執行一些其他代碼(如事件處理程序或長循環),則瀏覽器工作線程正忙,您的功能將不得不等待。考慮以下代碼:
setTimeout(f, 500);
for(var i = 0; i < 10000000; ++i){
//...
}
setTimeout
立即返回,允許執行循環。如果此循環運行時間超過500毫秒,則不會中斷,您的功能將不得不等待。如果在例如之後也會發生同樣的事情490毫秒觸發一些冗長的事件處理程序。
將瀏覽器JS工作線程視爲一個消費者和多個生產者的隊列。隊列中的某些項目可以立即拿起(如事件處理程序),有些項目必須等到其超時過期。
0
也許我不明白這個問題..但這是直接從window
規範。
的setTimeout(函數,毫秒) 此方法調用的 毫秒經過指定次數後該函數一旦 ,直到通過向clearTimeout呼叫取消 。方法 返回一個timerID,可用於 後續調用clearTimeout到 取消間隔。
基本上功能你指定已通過毫秒的量之後被調用。
1
Javascript是單線程的,並運行一個調用堆棧,它基本上是先到先得的處理。
setInterval和setTimeout函數在提供的持續時間結束後將傳遞的函數放入調用堆棧中。這裏的區別在於結果不是在那個時候執行的,它們只是放在調用堆棧中,所以如果某個東西已經在運行,它將不會執行你在超時時提供的函數,直到你完成。
例如:
var i = 0;
setTimeout(function() { i = 1; }, 10);
for (; i < 1;) {}
你永遠不會離開,對於循環,即使10毫秒之後,功能設置我到1被調用,它只是在調用堆棧,並且不會在for循環完成之前生效。
相關問題
- 1. setTimeout函數未被調用?
- 2. 如何在doBackground被調用時註冊函數和gearmanworker?
- 3. 在系統調用之前將被調用的註冊函數
- 4. 調用函數時會註冊什麼?
- 5. 用atexit()註冊的函數沒有被調用
- 6. 何時用atexit()註冊的函數調用
- 7. 使用setTimeout調用函數的問題
- 8. 爲什麼我的函數在setTimeout()超時之前被調用?
- 9. 在setTimeout中調用的函數沒有被調用
- 10. 爲什麼我的spl_autoload_register註冊函數沒有被調用?
- 11. 調用setTimeout函數之後的函數
- 12. 當使用LocalBroadcastManager註冊BroadcastReceiver時,onReceive未被調用
- 13. SetTimeout從不調用函數
- 14. 從lambda函數調用AWSCognito註冊
- 15. 安全Lua調用C++註冊函數
- 16. 如何將參數傳遞給使用setTimeout調用的函數?
- 17. 使用setTimeout在Javascript中調用函數的函數
- 18. 使用setTimeout調用父函數的內部函數
- 19. 註冊回調函數
- 20. 使用setTimeout時函數的返回值
- 21. 如何使用typedef函數指針來註冊回調
- 22. 接收未註冊錯誤時的onDestroy函數調用
- 23. 調用nodejs函數settimeout與回調
- 24. 使用setTimeout時,「函數未定義」?
- 25. 的ActionScript的setTimeout,而不調用函數
- 26. 用setTimeout遞歸調用一個函數
- 27. 如何調用函數的函數內部進行的setTimeout
- 28. 使用JPA/Hibernate註冊SQL函數
- 29. 如何用setTimeout回調參數調用函數?
- 30. 什麼是由setTimeout調用的函數?
你是什麼意思?你的問題有點模糊。 – TJHeuvel 2011-06-07 14:30:34