網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
重點(diǎn):
1、首先要清楚常見的宏任務(wù)和微任務(wù)有哪些
宏任務(wù):setTimeout、setInterval、ajax;
微任務(wù):promise、async/await
2、其次要清楚的是??微任務(wù) 執(zhí)行時(shí)機(jī)比?宏任務(wù)??早
1、微任務(wù)和宏任務(wù)的執(zhí)行規(guī)則
?此處需要注意的是,當(dāng)所有微任務(wù)執(zhí)行完畢后才會(huì)取出一個(gè)宏任務(wù)執(zhí)行,宏任務(wù)中存在微任務(wù)的話還是需要將所有微任務(wù)執(zhí)行完在取出一個(gè)宏任務(wù)繼續(xù)執(zhí)行。
2、JS運(yùn)行機(jī)制
此處不做過(guò)多介紹,主要注意以下幾點(diǎn):
- js是單線程,所謂單線程就是指JS在引擎中只負(fù)責(zé)解釋和執(zhí)行JS代碼的線程只有一個(gè)。這點(diǎn)事核心,將來(lái)也不會(huì)改變。
- 同步任務(wù)會(huì)在調(diào)用棧中按照順序等待主線程一次執(zhí)行;異步任務(wù)會(huì)在異步任務(wù)有了結(jié)果后,將注冊(cè)的回調(diào)函數(shù)放在任務(wù)隊(duì)列中,等待主線程空閑的時(shí)候,被讀取到棧內(nèi)等待主線程的執(zhí)行
- Promise本身事同步的立即執(zhí)行函數(shù),他的.then()和catch()方法是異步的(微任務(wù))
- async/await是建立在Promise機(jī)制上,當(dāng)調(diào)用一個(gè)async函數(shù)時(shí),會(huì)返回一個(gè)promise對(duì)象,而await操作符后面的表達(dá)式就是這個(gè)promise,返回值實(shí)際上就是peomise的回調(diào)函數(shù)resolve的參數(shù)。
- async方法執(zhí)行時(shí),遇到await會(huì)立即執(zhí)行表達(dá)式,async表達(dá)式定義的函數(shù)是立即執(zhí)行的,await表達(dá)式后面的代碼放在微任務(wù)執(zhí)行,包括賦值。
以下舉幾個(gè)例子
async function test1() {
console.log("test1 begin");
const result = await test2();
console.log("result", result);
console.log("test1 end");
}
async function test2() {
console.log("test2");
}
console.log("script begin");
test1();
console.log("script end");
控制臺(tái)打印:
?前面注意事項(xiàng)5中說(shuō)了,async方法執(zhí)行時(shí),遇到await會(huì)立即執(zhí)行表達(dá)式,所有第三次輸出應(yīng)該是test2。await后面的代碼將放在微任務(wù)中排隊(duì)。
結(jié)果: 1 4 7 5 2 3 6
原文鏈接:https://blog.csdn.net/weixin_46545002/article/details/126285202
相關(guān)推薦
- 2023-05-15 shell?Bash的數(shù)組與關(guān)聯(lián)數(shù)組的實(shí)現(xiàn)_linux shell
- 2024-03-13 Linux 安裝RabbitMQ
- 2022-05-21 k8s入門集群組件介紹及概念理解_服務(wù)器其它
- 2022-12-31 Android入門之Service的使用詳解_Android
- 2023-01-31 Android位圖(圖片)加載引入的內(nèi)存溢出問(wèn)題詳細(xì)解析_Android
- 2022-08-15 linux環(huán)境下查看日志文件的一些操作
- 2022-07-10 TypeError: Cannot read property ‘forceUpdate‘ of u
- 2022-04-11 python進(jìn)程結(jié)束后端口占用問(wèn)題解析_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支