2014-09-03 51 views
1

我想弄清楚用戶操作觸發的事件是如何發生的。mousedown事件是否可以在循環中發生?

在下面的例子中,事件是否發生在兩個函數之間,只導致第二個函數執行?

var mouseDown = false; 

element.addEventListener('mousedown', function(evt) { 
    mouseDown = true; 
}, false); 

function loop() { 
    doSomething(); 

    // Can mouseDown be set to true here? 

    doSomethingElse(); 

    mouseDown = false; 

    requestAnimationFrame(loop); 
} 

function doSomething() { 
    if (mouseDown) { 
     // Do something 
    } 
} 

function doSomethingElse() { 
    if (mouseDown) { 
     // Do something else 
    } 
} 

發生這種情況還是事件推遲到循環回合之間?

+3

Javascript運行在單線程中,所有事件將被添加到隊列中並在當前代碼執行完成後執行。 – scragar 2014-09-03 09:35:26

回答

1

不,那永遠不會*發生。

Javascript事件處理是單線程的,這意味着只要代碼正在運行就不會處理任何事件。

當您退出功能(loop)並將控制權返回給瀏覽器時,事件處理可以恢復。


(*)如果你有這樣的代碼的alert一個對話框中的例外是,那麼一些事件可以被處理,在某些瀏覽器。

相關問題