JavaScript 核心机制深度解析
事件循环与异步执行
- 执行顺序口诀:先同步,后微任务,再宏任务。微任务队列清空后才会执行下一个宏任务。
- 关键陷阱:
Promise构造函数内的代码是同步执行的,只有.then回调才属于微任务;await会暂停函数执行,但不会阻塞外部同步代码。 - 实战场景:结合
setTimeout、Promise和async/await的混合代码,考察对宏任务与微任务优先级及执行时机的理解。
闭包与作用域链
- 核心定义:闭包是函数与其声明时所处词法环境的组合,即使函数在词法环境之外执行,也能访问该环境中的变量。
- 应用场景:模块化封装(私有变量)、防抖节流(状态保留)、函数柯里化以及 React Hooks 的状态管理。
- 内存泄漏风险:闭包导致外层函数变量无法被垃圾回收,需通过及时解除引用(如赋值为
null)或使用WeakMap来避免内存泄漏。
Promise 与 async/await
- 本质关系:
async/await是Promise的语法糖,async函数总是返回一个Promise对象,await会等待右侧Promise状态变更。 - 执行时机:
await右侧的表达式会立即执行,而await后续的代码会被放入微任务队列,等待当前宏任务执行完毕后再执行。 - 错误处理:
async函数中未捕获的Promise拒绝会导致整个函数返回的Promise被拒绝,需结合try/catch进行异常处理。