一、事件循環(huán)

JavaScript是單線(xiàn)程,同一個(gè)時(shí)間只能做一件事情,所以執(zhí)行任務(wù)需要排隊(duì)。如果前一個(gè)耗時(shí)很長(zhǎng),那么下一個(gè)只能等待。

1)兩種任務(wù)

為了更好的處理任務(wù),JavaScript語(yǔ)言的設(shè)計(jì)者將任務(wù)分為兩種:同步任務(wù)(synchronous)與異步任務(wù)(asynchronous)。

同步任務(wù):在主線(xiàn)程上排隊(duì)執(zhí)行的任務(wù)。

異步任務(wù):放在“任務(wù)隊(duì)列”(task queue)中,只有當(dāng)主線(xiàn)程空了,才會(huì)將“任務(wù)隊(duì)列”中的任務(wù)放到主線(xiàn)程中。

這就是JavaScript的運(yùn)行機(jī)制,這個(gè)過(guò)程會(huì)不斷重復(fù),這個(gè)機(jī)制叫事件循環(huán)(Event Loop)。

2)事件循環(huán)

事件循環(huán)模型可以用下圖描述,圖片來(lái)自Philip Roberts的演講《Help, I’m stuck in an event loop》:

平面設(shè)計(jì)培訓(xùn),網(wǎng)頁(yè)設(shè)計(jì)培訓(xùn),美工培訓(xùn),游戲開(kāi)發(fā),動(dòng)畫(huà)培訓(xùn)

1. “WebAPIs”內(nèi)的就是異步任務(wù),包括DOM事件、Ajax和setTimeout。

2. “callback queue”內(nèi)的是一個(gè)任務(wù)隊(duì)列,包括click、load、done。

延伸閱讀

學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開(kāi)發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式