🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
> javascript是单线程的。主线程拥有一个执行栈和一个任务队列。 > 主线程依次执行代码,当遇到异步函数会将函数入栈。 > 当所有主线程函数运行完毕,再将异步函数出栈,直到所有异步函数执行完毕。 > ### 区别 #### macrotasks: - setTimeout - setInterval - setImmediate - requestAnimationFrame - I/O - UI rendering #### microtasks: - process.nextTick - Promises - Object.observe - MutationObserver **microtask的执行优先级高于macrotask** ### 示例 ```js setTimeout(function() { console.log(1) }, 0); new Promise(function executor(resolve) { console.log(2); for( var i=0 ; i<10000 ; i++ ) { i == 9999 && resolve(); } console.log(3); }).then(function() { console.log(4); }); console.log(5); // 输出 2,3,5,4,1 ```