1 事件循环event loop概念:
js 是非阻塞单线程语言,js在执行过程中会产生执行环境,执行环境会按顺序添加到执行栈中,先执行同步栈中的任务,当遇到异步任务时会添加到task队列中,同步栈执行完后,会执行异步队列,event loop会从异步(task)队列中提取要执行的代码放到执行栈中,这个过程叫事件循环。
2 宏任务和微任务
原则:先进先出原则。
异步又分为宏任务和微任务,执行顺序是先执行微任务,在执行宏任务如下图:
2-1 宏任务和微任务代码:
注意:Promise本身是同步代码,但他的回调then,catch属于异步--微任务
3 案例
console.log('a')
setTimeout(()=>{
console.log('b')
},0)
const o = new Promise((resolve,reject)=>{
console.log('c')
resolve(true)
console.log('d')
})
o.then(res=>{
console.log('e')
})
console.log('f')
结果是:a , c, d, f, e