1、引子
题目:
console.log(1);
setTimeout(function(){
console.log(3);
},0);
console.log(2);
输出结果:1 2 3
2、JS是单线程的
单线程:同一个时间只能做一件事
3、任务队列(消息队列)
同步任务:在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;
异步任务:不进入主线程、而进入"任务队列"(task queue)的任务,只有"任务队列"通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。
4、任务分类:
宏任务:包括整体代码script,setTimeout,setInterval
微任务:Promise,process.nextTick
5、执行流程图
事件循环,宏任务,微任务的关系如图:
7、参考文章:
https://juejin.im/post/59e85eebf265da430d571f89