宏任务、微任务
宏任务:setTimeout,setInterval,DOM事件,AJAX请求
微任务:Promise,asyc/await
1 //主线程直接执行 2 console.log('1'); 3 //丢到宏事件队列中 4 setTimeout(function() { 5 console.log('2'); 6 process.nextTick(function() { 7 console.log('3'); 8 }) 9 new Promise(function(resolve) { 10 console.log('4'); 11 resolve(); 12 }).then(function() { 13 console.log('5') 14 }) 15 }) 16 //微事件1 17 process.nextTick(function() { 18 console.log('6'); 19 }) 20 //主线程直接执行 21 new Promise(function(resolve) { 22 console.log('7'); 23 resolve(); 24 }).then(function() { 25 //微事件2 26 console.log('8') 27 }) 28 //丢到宏事件队列中 29 setTimeout(function() { 30 console.log('9'); 31 process.nextTick(function() { 32 console.log('10'); 33 }) 34 new Promise(function(resolve) { 35 console.log('11'); 36 resolve(); 37 }).then(function() { 38 console.log('12') 39 }) 40 })
执行此代码后控制台依次输出1 7 6 8 2 4 3 5 9 11 10 12。JS是单线程执行的机制,执行主线程,然后在宏任务队列中取出一个宏任务执行,执行后继续执行此宏任务内部的微任务。等内部所有微任务执行完之后,再回到宏任务队列取出第二个宏任务,周而复始地执行下去。
本文部分内容转自https://www.cnblogs.com/wangziye/p/9566454.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具