什么是宏任务和微任务
宏任务包括:setTimeout setInterval Ajax DOM事件
微任务:Promise async/await
微任务比宏任务的执行时间要早
异步和单线程
异步和单线程是相辅相成的,js是一门单线程脚本语言,所以需要异步来辅助
异步和同步的区别:
- 异步不会阻塞程序的执行,
- 同步会阻塞程序的执行,
事件循环(event loop)
同步进入主线程,异步进入任务队列,主线程内的任务执行完毕为空,就去任务队列(Event Queue)读取对应的函数进入主线程执行。
上述过程会不断重复,也就是常说的Event Loop(事件循环)。
执行顺序
第一步:先执行所有的同步任务(log)
第二步:执行完毕再去执行第一个宏任务(宏1)
第三步:执行第一个宏任务的时候,先看有没有需要执行的‘微任务’(promise),如果有就执行,没有就执行‘宏任务’(执行完第一批‘微任务’,此时去执行第二个宏任务)
第四步:宏2同上