有一些關(guān)于javascript的事件循環(huán)機(jī)制的疑問(wèn),js是單線(xiàn)程語(yǔ)言,執(zhí)行過(guò)程中,遇到異步任務(wù)會(huì)將異步任務(wù)單獨(dú)放在一個(gè)任務(wù)隊(duì)列中,等到主線(xiàn)程中的任務(wù)執(zhí)行完成后,再由事件循環(huán)機(jī)制將已經(jīng)完成的異步任務(wù)放入主線(xiàn)程中執(zhí)行。
給頁(yè)面的DOM元素綁定的事件(比如click事件),也是異步的,需要觸發(fā)之后才會(huì)執(zhí)行相應(yīng)的代碼,那么此類(lèi)DOM事件和異步事件(比如setTimeOut、ajax等)的本質(zhì)區(qū)別是什么呢?DOM事件的觸發(fā)是否也是通過(guò)事件循環(huán)機(jī)制來(lái)控制的?
DOM事件既有同步有也異步。
比如如鼠標(biāo)事件
我們都知道macrotask執(zhí)行完后,需要檢查有沒(méi)有microtask,如果有則執(zhí)行microtask,之后才會(huì)執(zhí)行macrotask。那么我只要知道promise回調(diào)在什么時(shí)候執(zhí)行,就知道這是個(gè)異步的還是同步的。
舉個(gè)栗子
http://jsfiddle.net/631807682...
比如load事件
Events may be dispatched either synchronously or asynchronously.Events which are synchronous (sync events) are treated as if they are in a virtual queue in a first-in-first-out model, ordered by sequence of temporal occurrence with respect to other events, to changes in the DOM, and to user interaction. Each event in this virtual queue is delayed until the previous event has completed its propagation behavior, or been canceled. Some sync events are driven by a specific device or process, such as mouse button events. These events are governed by the event order algorithms defined for that set of events, and user agents will dispatch these events in the defined order.
Events which are asynchronous (async events) may be dispatched as the results of the action are completed, with no relation to other events, to other changes in the DOM, nor to user interaction.
北大青鳥(niǎo)APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專(zhuān)業(yè)的國(guó)家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
北大課工場(chǎng)是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國(guó)家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國(guó)制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國(guó)職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開(kāi)發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_(kāi)發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開(kāi)發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開(kāi)發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。