event loop
指的是浏览器和 node 解决 js 单线程运行时不会阻塞的一种机制
js执行方式
总结1:加载的时候就分为同步任务、微任务、宏任务,遇到同步任务放到主线程再立即执行;遇到微任务先放到微任务队列,等同步任务执行完再依次执行微任务;遇到宏任务先把它放到宏任务队列,在任务对列里面就执行代码 得出结果,等微任务执行完再依次执行宏任务
总结2:
- 先执行同步任务 遇到函数就执行函数;
- 函数调用完了继续执行同步任务;
- 同步任务完成 就 执行微任务promise await后的任务才是微任务;
- 微任务执行完;再执行宏任务 settimeout
执行顺序:同步任务>微任务>宏任务
微任务
Promise(同步的立即执行函数) Promise.then 里的才属于微任务 async await
let a = new Promise(res => {
console.log('promise1');//同步任务
res()
})
a.then(() => {
console.log('promise2');//微任务
})
async function async1() {
console.log('async1 start 同步任务');
await async2()
console.log('async1 end 微任务')
}
async function async2() {
console.log('async2 end 同步任务')
}
宏任务
settiomeout setinterval DOM事件 网络请求
setTimeout(function () {
console.log('setTimeout1');
}, 0);//即使为 0 也是等微任务执行完了 再执行宏任务