雖然我在JavaScript語法上很精通,但對於引擎蓋下的內容我卻一無所知。特別是對於什麼時候以及如何JavaScript引擎調度它實際運行,如果確實是按照任何意義來安排的話。我太無能,甚至不知道我應該用什麼術語來研究它。JavaScript引擎如何選擇接下來要執行的內容?
我一直只是假設,從簡單地聽別人鸚鵡它,JavaScript引擎一次只能運行一個線程。假設這是真的,並且在回調發生時一個函數正在運行,幕後會發生什麼? 當前正在運行的函數暫停並執行回調,或者當前正在運行的函數的完整堆棧解繞,然後運行回調中的代碼。
我只是毫無章法,這是可恥的......
如何這一切是適合與在瀏覽器的UI線程,如何在node.js中它不同
很抱歉,如果這個問題有點開放,最後我真正要問的是 - 我應該研究什麼(例如谷歌)來了解所有這些。
閱讀[你不知道JS](https://github.com/getify/You-Dont-Know-JS),它涵蓋了Javascript的基本內部工作原理。而且,自從網絡工作者出現以來,Javascript不再是單線程的。 – Nit
JavaScript有一個事件循環。幕後發生的情況是,當事件發生時(例如超時,用戶事件,服務器發送的事件等),該事件被放入事件隊列中。當前函數完成執行時,隊列中的下一個事件將被處理。在此之前隊列中的所有事件都會等待。如果沒有更多事件要處理,則事件循環保持空閒狀態,直到發生另一事件。這有點像當你站在銀行等待出納員爲你服務的時候。只有一個出納員(單線程),它是第一次發球。 =) –
https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop –