一、前提:
1.JavaScript是单线程语言,代码从上到下执行。
2.JavaScript通过回调函数处理异步。
3.除了广义的同步任务和异步任务,任务还被更精细的定义为宏任务和微任务:
宏任务:整个script代码块、setTimeout、setInterval
微任务:Promise的.then、process.nextTick
4.宏任务和微任务有各自独立的事件队列。
二、概述:JavaScript是运行机制是事件循环。
三、使用事件循环处理异步任务:
1.从上到下执行代码,同步任务直接进入主进程依次执行,异步任务写入事件列表。
2.当事件列表里的某个异步任务的异步事件完成时,将其移动到事件队列。
3.主进程的同步任务依次执行完毕时,检查事件队列,如果事件队列里有异步任务,则执行事件队列里的异步任务。
4.重复执行2-3,直到代码执行完毕。
四、使用事件循环处理异步任务,区分宏任务和微任务:
1.整个script代码块作为宏任务,进入主线程执行。
2.从上到下执行代码,同步任务直接进入主进程依次执行,异步任务写入事件列表。
3.当事件列表里的某个异步任务的异步事件完成时,将其移动到事件队列。
4.在3中,宏任务移动到宏任务的事件队列,微任务移动到微任务的事件队列。
5.script代码块作为宏任务执行首先完。
6.检查微任务的事件队列,看是否有异步任务,有则执行。
7.检查宏任务的事件队列,看是否有异步任务,有则执行。
8.重复执行6-7,直到代码执行完毕。