一个生活场景,假设我在银行柜台办法存款业务,在办理过后突然想办一张信用卡。这时我会告诉银行柜员我的需求,而银行的柜员为了提高效率以及客户体验。不会让我重新排队,一般能让我办理的话,就会一起办。这种行为并不是插队,只是完成主要任务过后临时加入一些小插曲。
这个例子当中,我们在排队办理业务就像 JS 当中回调队列等待执行的任务,队伍当中每一个人对应回调队列的一个任务。
宏任务
回调队列中的任务称之为 宏任务
宏任务执行过程中可以临时加上一些额外需求,可以选择作为一个新的宏任务进到队列中排队
目前绝大多数异步调用都是作为宏任务执行
setTimeout, setInterval, DOM 事件,AJAX 请求
微任务
宏任务执行过程中可以临时加上一些额外需求, 可以作为当前任务的 微任务
直接在前任务结束过后立即执行
微任务会在本轮回调的末尾进行执行
其目的是提高整体的响应能力
Promise, async/await, Process.nextTick, MutationObserver
微任务执行时机比宏任务早
微任务 > DOM 渲染 > 宏任务