同步任务
- 叫做非耗时任务,指的是在主线程上排队执行的那些任务
- 只有前一个任务执行完毕了,才能执行后一个任务
异步任务
- 叫做耗时任务,异步任务由 javascript 委托给宿主环境进行执行的
- 当异步任务完成后,会通知 javascript 主线程执行异步任务的回调函数
分析输出的顺序
console.log('A');
thenFs.readFile('./1.txt','utf8').then(res=>{console.log('B')})
setTimeout(()=>{
console.log('C')
},0)
console.log('D')
分析:A和D是同步任务,会根据代码的先后执行顺序输出
C和B是异步任务,它们的回调函数会被加入到任务队列中,等同步任务执行完会依次执行异步任务(哪个异步任务先执行完哪个先输出)
什么是宏任务和微任务
javascript 把异步任务分为了两类
① 宏任务
- 异步Ajax请求
- setTimeout、setInterval
- 文件操作
- 其他。。。
② 微任务
- Promise.then、.catch和.finally
- process.nextTick
- 其他。。。
执行顺序
先看看有没有宏任务,没有就执行结束,再看看有没有微任务,有微任务就执行所有的微任务,执行完再执行下一个宏任务,总之就是每一个宏任务执行完之后,都会检查是否存在待执行的微任务,如果有,就执行完所有的微任务,再继续执行下一个宏任务
面试题:判断一下执行顺序