2014-10-10 36 views
1

假設我有以下代碼:2個功能同時執行。可能嗎?

var funcIsRunning = 0; 
function a(){ 
    funcIsRunning = 1; 
    // some code ... (maybe lots of code); 
    funcIsRunning = 0; 
} 

是否有任何機會,一些異步函數會趕上在「1」位置funcIsRunning標誌? (例如XHR的回調或通過setTimeout調用的函數等) 或者相同,兩個函數可以同時執行(而不是一個接一個地執行)?

只是爲了說清楚......事實上,我不必同時運行2個funcs ...我只是想知道它是如何工作的。

P.S.如果您能提供您的答案的文檔/基礎,我將不勝感激 非常感謝!


這裏製造的測試,說明給出的答案:http://jsfiddle.net/rz7tvyof/

+2

通常你根本不依賴於任何特定的執行順序。有關更多信息,請參閱http://blog.carbonfive.com/2013/10/27/the-javascript-event-loop-explained/ – jgillich 2014-10-10 07:42:33

回答

2

不,JavaScript是單線程的,運行在同一時間只有一個功能。儘管如此,如果你有一個回調函數等,也就是說,這種情況發生在funcIsRunning = 1返回一個網絡請求,該回調函數將在隊列中把由事件循環

JavaScript event loop explained

2

通常處理不感謝事件循環。但是,您可以使用Web Workers並行運行代碼(有一些限制,如訪問DOM等)。

​​