最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JS事件循環(huán)機制event loop宏任務(wù)微任務(wù)原理解析

 更新時間:2020年08月04日 14:56:22   作者:大專欄  
這篇文章主要介紹了JS事件循環(huán)機制event loop宏任務(wù)微任務(wù)原理解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

首先看一段代碼

async function (){
		await f2()
		console.log('f1')
	}

	async function f2(){
		console.log('f2')
	}
	
	console.log('正常1')
	f1()
	setTimeout(()=>{
		console.log('定時器')
	})
	console.log('正常2')

正確的打印順序應(yīng)該是:正常1,f2 ,正常2,f1,定時器

為什么會出現(xiàn)這樣打印順序呢

首先javascript是一門單線程語言,在最新的HTML5中提出了Web-Worker,但javascript是單線程這一核心仍未改變。既然js是單線程,那就像只有一個窗口的銀行,客戶需要排隊一個一個辦理業(yè)務(wù),同理js任務(wù)也要一個一個順序執(zhí)行。如果一個任務(wù)耗時過長,那么后一個任務(wù)也必須等著。所以就出現(xiàn)了同步任務(wù)和異步任務(wù)。

概念

除了廣義的同步任務(wù)和異步任務(wù),對任務(wù)可以進行更精細的區(qū)分

  • macro-task(宏任務(wù)):包括整體代碼script,setTimeout,setInterval
  • micro-task(微任務(wù)):Promise,process.nextTick

宏任務(wù):瀏覽器為了能夠使得JS內(nèi)部task與DOM任務(wù)能夠有序的執(zhí)行,會在一個task執(zhí)行結(jié)束后,在下一個 task 執(zhí)行開始前,對頁面進行重新渲染 (task->渲染->task->…)

鼠標點擊會觸發(fā)一個事件回調(diào),需要執(zhí)行一個宏任務(wù),然后解析HTMl

微任務(wù):微任務(wù)通常來說就是需要在當(dāng)前 同步任務(wù) 執(zhí)行結(jié)束后立即執(zhí)行的任務(wù),比如對一系列動作做出反饋,或者是需要異步的執(zhí)行任務(wù)而又不需要分配一個新的任務(wù),這樣便可以減小一點性能的開銷。

既然我們清楚了概念,我們再看一遍代碼

async function (){
		await f2()
		console.log('f1')
	}

	async function f2(){
		console.log('f2')
	}
	
	console.log('正常1')
	f1()
	setTimeout(()=>{
		console.log('定時器')
	})
	console.log('正常2')

執(zhí)行順序

首先我們進行正常的同步流程,打印出‘正常1',接下來執(zhí)行f1()函數(shù),await后面的函數(shù)f2()會立即執(zhí)行,所以會打印'f2',繼續(xù)執(zhí)行同步代碼打印‘正常2',至此同步任務(wù)全部結(jié)束,開始執(zhí)行異步任務(wù)微任務(wù),await f2()等待f2()方法執(zhí)行完之后打印出f1,最后執(zhí)行宏任務(wù)setTimeout打印‘定時器'

這就是為什么‘正常1',正常2'會打印在‘f1'之前,因為所有微任務(wù)執(zhí)行的時候,當(dāng)前執(zhí)行棧的代碼必須已經(jīng)執(zhí)行完畢?!甪2','f1'會打印在‘定時器'之前是因為所有微任務(wù)總會在下一個宏任務(wù)之前全部執(zhí)行完畢

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • js中this的指向問題歸納總結(jié)

    js中this的指向問題歸納總結(jié)

    最近發(fā)現(xiàn)在對JS的學(xué)習(xí)中有很多朋友對this的指向問題還是有很大的誤區(qū)或者說只是大致了解,但是一旦遇到復(fù)雜的情況就會因為this指向問題而引發(fā)各種bug。所以這篇文章主要給大家介紹了關(guān)于js中this的指向問題的相關(guān)資料,需要的朋友可以參考下
    2018-11-11
  • javascript中創(chuàng)建對象的三種常用方法

    javascript中創(chuàng)建對象的三種常用方法

    在javascript中創(chuàng)建對象的三種方法,腳本之家以前發(fā)布過有簡單實例版的,大家可以參考下。
    2010-12-12
  • three.js 將圖片馬賽克化的示例代碼

    three.js 將圖片馬賽克化的示例代碼

    這篇文章主要介紹了three.js 將圖片馬賽克化的方法,文中示例代碼非常詳細,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • JavaScript實現(xiàn)給浮點數(shù)添加千分位逗號的多種方法

    JavaScript實現(xiàn)給浮點數(shù)添加千分位逗號的多種方法

    JavaScript 是一門強大的前端語言,在處理數(shù)值格式化時提供了多種方法,在開發(fā)過程中,我們經(jīng)常需要將大數(shù)字格式化,使其更具可讀性,例如,將 12000000.11 轉(zhuǎn)換為 12,000,000.11,本文將詳細介紹 JavaScript 中如何實現(xiàn)這種格式化,需要的朋友可以參考下
    2025-04-04
  • js兩行代碼按指定格式輸出日期時間

    js兩行代碼按指定格式輸出日期時間

    javascript兩行代碼即可實現(xiàn)按指定格式輸出日期時間,非常不錯,需要的朋友可以參考下
    2011-10-10
  • 微信小程序?qū)崿F(xiàn)動態(tài)驗證碼

    微信小程序?qū)崿F(xiàn)動態(tài)驗證碼

    這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)動態(tài)驗證碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 有趣的思路~~JS仿 WINXP 注銷桌面漸隱效果

    有趣的思路~~JS仿 WINXP 注銷桌面漸隱效果

    有趣的思路~~JS仿 WINXP 注銷桌面漸隱效果...
    2006-10-10
  • JavaScript實現(xiàn)獲取某個元素相鄰兄弟節(jié)點的prev與next方法

    JavaScript實現(xiàn)獲取某個元素相鄰兄弟節(jié)點的prev與next方法

    這篇文章主要介紹了JavaScript實現(xiàn)獲取某個元素相鄰兄弟節(jié)點的prev與next方法,涉及JavaScript基于函數(shù)的判定及調(diào)用previousSibling與nextSibling的相關(guān)技巧,需要的朋友可以參考下
    2016-01-01
  • JS二叉樹的簡單實現(xiàn)方法示例

    JS二叉樹的簡單實現(xiàn)方法示例

    這篇文章主要介紹了JS二叉樹的簡單實現(xiàn)方法,結(jié)合具體實例形式分析了基于javascript定義二叉樹及二叉樹節(jié)點的遍歷、查找、添加、刪除及運算相關(guān)操作技巧,需要的朋友可以參考下
    2017-04-04
  • JavaScript表單即時驗證 驗證不成功不能提交

    JavaScript表單即時驗證 驗證不成功不能提交

    這篇文章主要為大家詳細介紹了JavaScript表單即時驗證,驗證不成功不能提交,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-08-08

最新評論

大化| 乌审旗| 自治县| 贡嘎县| 改则县| 旌德县| 托克逊县| 隆德县| 澄迈县| 阜宁县| 台江县| 新巴尔虎左旗| 淳安县| 新龙县| 大洼县| 康定县| 静宁县| 冀州市| 奉化市| 新田县| 昆明市| 拉孜县| 延边| 乌兰浩特市| 新建县| 从化市| 弥渡县| 吕梁市| 顺义区| 通州市| 凤台县| 高青县| 海盐县| 如皋市| 北安市| 饶阳县| 台湾省| 汉阴县| 大余县| 松原市| 仁布县|