事件循环
事件循环
事件循环即js运行机制
js是单线程,先同步后异步,先微观再宏观
- 所有同步任务都在主线程进行,形成一个执行栈,
- 主线程之外还有一个“任务队列”,异步任务有了结果会在任务队列中防止一个事件
- 一旦执行栈中的所有同步任务完成之后,系统默认会读取任务队列中的的事件,结束等待状态
- 主线程不断重复第三步
主任务队列和等待任务队列
浏览器是多线程的,js是单线程的
js实现异步处理机制主要依赖于浏览器的任务队列
任务队列分为主任务队列和等待任务队列
在主任务队列自上而下执行的时候,若遇到一个异步操作,不会立即执行,而是把他放在等待任务队列中去排队,等主任务队列执行完后,再执行等待任务队列
宏任务和微任务
异步任务里分工宏任务和微任务
宏任务有:定时器(setTimeout(),setInterval(),).事件绑定,ajax,回调函数,node中的fs模块,script
微任务有:promise,async/aswait,procsee.nextTick,MutationObserver(html5新特性)
执行顺序
先执行主任务,执行完接着执行微任务,最后执行宏任务,按照条件的顺序依次执行
这种循环机制又叫事件循环(event loop)
console.log(1);
setTimeout(() => {
console.log(2);
process.nextTick(() => {
console.log(3);
});
new Promise((resolve) => {
console.log(4);
resolve();
}).then(() => {
console.log(5);
});
});
new Promise((resolve) => {
console.log(7);
resolve();
}).then(() => {
console.log(8);
});
process.nextTick(() => {
console.log(6);
});
setTimeout(() => {
console.log(9);
process.nextTick(() => {
console.log(10);
});
new Promise((resolve) => {
console.log(11);
resolve();
}).then(() => {
console.log(12);
});
});
// 1 7 6 8 2 4 3 5 9 11 10 12
本文作者:张尊娟
本文链接:https://www.cnblogs.com/wszzj/p/16265000.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步