浏览器: 执行一个宏任务,执行所有微任务
node:先执行所有宏任务,再执行微任务
function test() { console.log(‘start‘) setTimeout(() => { console.log(‘children2‘) Promise.resolve().then(() => { console.log(‘children2-1‘) }) }, 0) setTimeout(() => { console.log(‘children3‘) Promise.resolve().then(() => { console.log(‘children3-1‘) }) }, 0) Promise.resolve().then(() => { console.log(‘children1‘) }) console.log(‘end‘) } test() /** * 浏览器分析 * 执行一个宏任务,执行完所有微任务 * 1.start主线执行, * 2.children2添加到宏任务队列 * 3.children3添加到宏任务队列 * 4.children1添加到微任务队列 * 5.end主线执行 * ------------以上主线任务执行完毕,开始检查微任务---------------- * 6.微任务队列中有children1,执行 * ------------微任务执行完毕,开始检查宏任务------------------- * 7.children2排在宏任务队列第一个,执行,并将children2-1添加到微任务中 * ------------宏任务执行一个,开始执行所有微任务--------------- * 8.微任务队列只有children2-1,执行 * ------------微任务执行完毕,开始检查宏任务------------------- * 9.宏任务队列第二个为children3,执行,并将children3-1添加到微任务中 * ------------宏任务执行一个,开始执行所有微任务--------------- * 10.微任务队列只有children3-1,执行 * ------------微任务执行完毕,开始检查宏任务,无,检查微任务,无,代码执行完毕------------------- */ /** * node11以下版本分析 * 先执行所有的宏任务,再执行微任务 * 1.start主线执行, * 2.children2添加到宏任务队列 * 3.children3添加到宏任务队列 * 4.children1添加到微任务队列 * 5.end主线执行 * ------------以上主线任务执行完毕,开始检查微任务---------------- * 6.微任务队列中有children1,执行 * ------------微任务执行完毕,开始检查宏任务------------------- * 7.children2排在宏任务队列第一个,执行,并将children2-1添加到微任务中 * 8.宏任务队列第二个为children3,执行,并将children3-1添加到微任务中 * ------------宏任务全部执行完毕,开始检查微任务------------------- * 9.微任务第一个children2-1,执行 * 10.微任务第二个children3-1,执行 * ------------微任务执行完毕,开始检查宏任务,无,检查微任务,无,代码执行完毕------------------- */
原文:https://www.cnblogs.com/lianglanlan/p/14420772.html