5
我有一些非常奇怪的行爲正在進行。我有以下jQuery:JS調試器是否暫停整個JS事件循環?
myElement.fadeOut(100);
有一些種族情況正在發生,使元素不會最終隱藏。如果我在該行上放置了一個調試器並逐步完成代碼,那麼它可以正常工作,並且元素會淡出並隱藏起來。稱它爲Heisenbug。
我的問題不在於比賽條件本身。鑑於JavaScript運行時的性質,我想知道如何發生這種情況。按照我的理解如下謂詞爲真:
- 淡出()由JQuery的動畫()
- 動畫()實現是由一系列的
setTimeout()
電話 setTimeout()
調度函數在執行實施某個時間點的隊列- 當事件到達隊列的開始位置時,將執行該功能。
- 只有一個事件循環,按順序執行。
- 在任何給定的時間點,只有一個通過調用堆棧的函數/路徑正在執行。
鑑於我正在逐步調試我的調試器中的函數,所以必須暫停執行,並且不能執行其他函數。
我看不出在這種情況下出現競態條件的可能性。 您能否建議執行的調試代碼和非調試代碼之間有何不同?
啊,你知道嗎,有一個阿賈克斯負載。這可能是... – Joe 2012-07-20 14:08:13
使用成功或完成回調,而不是超時,如果這是怎麼回事。總是假設阿賈克斯可能會掛一點點。 – 2012-07-20 14:10:13
我當然沒有爲此目的使用超時! – Joe 2012-08-15 14:38:02