Q1主动回忆难度 2
1/10
JavaScript 核心 · 异步与事件循环
记忆强度
事件机制、Promise、async/await 与事件循环的执行顺序,手撕输出顺序题的必备。
JavaScript 核心 · 异步与事件循环
console.log('1', a)、console.log('2', a)、console.log('3', a)按什么顺序输出,各自的值是多少,为什么?依次输出 1 1、2 10、3 20,因为 await 暂停函数并让外部同步代码先执行。
async/await由Generator与自动执行器协作,通过Promise.then递归调用next直至完成。
一个宏任务结束后清空全部微任务,必要时渲染页面,再执行下一个宏任务。
同步输出 1 6 2 3 8,微任务依次输出 7 4,最后宏任务输出 5。
六阶段依次为 timers、I/O callbacks、idle/prepare、poll、check、close callbacks。
事件依次经历捕获、目标、冒泡阶段;捕获由外到内,冒泡由内到外,useCapture 决定注册阶段。
事件委托利用冒泡让外层节点统一处理子节点事件,可减少 DOM 操作、节省内存且无需注销子节点事件。
Promise 从 pending 转为 fulfilled 或 rejected 后,状态便不可再次改变。
then 返回新实例,才能在状态不可逆的前提下承载每一轮处理结果并继续链式调用。
应使用 Promise.allSettled,它会在全部处理完成后返回每一项的状态与结果。