我們知道JavaScript是單線程的,但我們想確認我們對JavaScript中異步事件處理的理解。更重要的是,我們想確認我們沒有接觸到潛在的競爭條件。JavaScript事件處理的競爭條件?
從概念上講,我們的移動應用程序的工作原理是這樣的:
我們在加載移動網頁調用函數
foo
。截至
foo
最後,我們使用setTimeout
再次調用foo
(以一秒的延遲)如果計數器大於0
更大。如果計數器遇到0
,我們將加載一個新頁面。超時保存在一個變量中。如果點擊一個按鈕,我們調用函數
do_tap
並清除步驟二中保存的超時變量(並執行其他操作)。
do_tap
和foo
更新都在同一個頁面元素,我們想確認,他們不會互相步驟。
問題:
假設的
foo
的執行期間發生的抽頭。在foo
完成後,瀏覽器隊列do_tap
是否會開始執行?換句話說,我們保證一旦foo
開始,我們永遠不會看到執行foo
和do_tap
交錯?如果水龍頭先出現怎麼辦?
do_tap
保證在foo
開始前完成,對吧?
由於執行是單線程的,因此'foo'在'Do_tap'返回之前開始執行是根本不可能的(反之亦然)。閱讀本文,您將瞭解瀏覽器中的執行隊列是如何工作的:http://ejohn.org/blog/how-javascript-timers-work/ – 2011-12-23 00:35:56