1.macro-task(宏任务):包括整体script代码,setInterval,setTimeout
2.micro-task(微任务):promise ,process.nexttrick(nodejs的内容)
执行顺序:宏任务>微任务
接下来我们可以看看这段代码
setTimeout(() => {
console.log(1);
process.nexttrick( () => console.log(5))
},0);
new Promise((resovle,reject) => {
console.log(2);
resovle();
}).then(() => console.log(3))
console.log(4);
这段代码输出的是什么??
接下来我们看一下上面那张图解来解答吧!
首先我们找到宏任务,也就是整体代码,定时器等。那么开始执行整体代码,执行promise中的整体代码输出2,然后就是输出4,这时所有的整体代码已执行完毕,继续查找当前已执行的代码中是否包含微任务,我们可以知道promise.then是微任务那么就是执行输出3,接着查找其他的宏任务那就是setTimeout输出1,再输出微任务5啦。
所以执行顺序就是2,4,3,1,5
(请注意,node环境下的事件监听依赖libuv与前端环境不完全相同,输出顺序可能会有误差)