? ? js是单线程的,内部要处理的任务分同步任务、异步任务
? ? 异步任务分微任务、宏任务
? ? 执行顺序:【又称 事件循环机制 】
? ? 先执行同步任务,遇到异步宏任务则将异步宏任务放入宏任务队列中,遇到异步微任务则将异步微任务放入微任务队列中。当所有同步任务执行完毕后,再将异步微任务从队列中调入主线程执行,微任务执行完毕后再将异步宏任务从队列中调入主线程执行,一直循环直至所有任务执行完毕。
? ? 微任务和宏任务有哪些:
? ? ? ? 宏任务一般是:script、setTimeout、setInterval、I/O、UI交互事件、postMessage、MessageChannel
? ? ? ? 微任务:Promise.then、Object.observe、MutationObserver
? ? 示例:
setTimeout(function(){
console.log(1);
});
new Promise(function(resolve){
console.log(2);
resolve();
}).then(function(){
console.log(3);
}).then(function(){
console.log(4)
});
console.log(5);
// 2 5 3 4 1
? ? ? ? 遇到setTimout,异步宏任务,放入宏任务队列中
? ? ? ? 遇到new Promise,new Promise在实例化的过程中所执行的代码都是同步进行的,所以输出2
? ? ? ? Promise.then,异步微任务,将其放入微任务队列中
? ? ? ? 遇到同步任务console.log(5);输出5;主线程中同步任务执行完
? ? ? ? 从微任务队列中取出任务到主线程中,输出3、 4,微任务队列为空
? ? ? ? 从宏任务队列中取出任务到主线程中,输出1,宏任务队列为空