添加作業(yè)task2:
添加作業(yè)task3:
執(zhí)行到此處, task1、task2和task3都被放入了任務(wù)隊(duì)列; 然后執(zhí)行棧全部執(zhí)行完畢后,開始處理任務(wù)隊(duì)列中的任務(wù)。
為什么任務(wù)隊(duì)列中的任務(wù)必須在執(zhí)行棧空時(shí)后執(zhí)行呢?
這里我也不清楚,這畢竟真正涉及了底層內(nèi)容;只是有些明白為何這樣,不過擔(dān)心誤導(dǎo)他人,就算了。一般而言, 關(guān)于任務(wù)序列的相關(guān)概念沒有如此簡單,還涉及了很多東西,例如阻塞、調(diào)度(Schedule)等,這些方面可以參考其他諸如C 、Java這類多線程的語言或是看看操作系統(tǒng)這方面的內(nèi)容。如果只是簡單的業(yè)務(wù)實(shí)現(xiàn),不需要了解這么多底層的東西。
現(xiàn)在開始處理任務(wù)吧:
處理task2:
處理task1:
處理task3:
好了,一個(gè)事件循環(huán)就這么結(jié)束了。
然后Javascript引擎進(jìn)入休眠階段(Javascript引擎永不結(jié)束?。?,等待有新的任務(wù)執(zhí)行,然后開始下一個(gè)事件循環(huán)。
備注:這里只是一個(gè)簡單例子事件循環(huán)可以有多個(gè)任務(wù)隊(duì)列任務(wù)序列共分為兩種: 微任務(wù)序列和宏任務(wù)序列我們的script代碼,就是宏任務(wù)序列之一。最后: Javascript引擎
這是我精讀Javascript系列第三篇,猝不及防的就到了事件循環(huán),看起來一下子就深入好多好多…… 但是我覺得這才是最不合理程安排,大多的文檔都把任務(wù)序列和調(diào)用棧給分開了,但是在~~_____~~,它們本應(yīng)該就是一體,不應(yīng)該以任何方便的理由將它們分開。
深入Javascript, 除了看規(guī)范,最好也看下JS引擎的實(shí)現(xiàn)文檔,有些進(jìn)階內(nèi)容,不在規(guī)范中,而是在這些文檔里(請自己Google查找,百度也能搜索到)。
如果對Javascript引擎比較感興趣的,可以參考:
MDN About_JavascriptChromium V8參考Github V8
雖然,極其不建議新手一下子看V8源代碼,那種頭痛欲裂又渾身顫抖不止的感覺實(shí)在是過癮之極啊……
相關(guān)教程推薦:JavaScript視頻教程
更多關(guān)于云服務(wù)器,域名注冊,虛擬主機(jī)的問題,請?jiān)L問西部數(shù)碼官網(wǎng):m.ps-sw.cn