白狗子的博客

「天上浮云如白衣,斯须改变如苍狗。」——杜甫

JavaScript-面试-闭包

2026年10月16日·Admin·2 次浏览

面试题:什么是闭包?有什么用途与副作用?

定义

闭包:函数与其词法环境(引用的外层变量)的组合;使得内层函数在外层函数执行结束后,仍能访问外层被捕获的变量。

function outer() {
  let count = 0
  return function inner() {
    return ++count
  }
}

inner 持有对 count 的引用 → count 不会被回收。

常见用途

  1. 封装私有变量(模块模式、工厂函数)。
  2. 柯里化、偏函数。
  3. 防抖节流、事件监听里保存状态。
  4. React Hooks 闭包心智(useEffect 捕获某次渲染的 props/state)。

副作用

  • 内存:过度闭包引用大对象 → 难 GC。
  • 循环 + var 经典题:旧代码里 for (var i=0; i<3; i++) { setTimeout(()=>console.log(i)) } 全打 3;用 let 或 IIFE 传参解决。

与作用域

闭包依赖词法作用域:定义时决定自由变量来自哪一层,而非调用栈。

© 2025 My Blog. Built with Nuxt.js v4