闭包(Closure)

一、是什么

闭包 =

函数 + 其词法作用域的组合

二、简单理解

一个函数可以“记住外部变量”,就形成闭包

三、示例

function outer() {
  let count = 0;

  return function inner() {
    count++;
    console.log(count);
  };
}

const fn = outer();
fn(); // 1
fn(); // 2

四、闭包本质

JS 引擎机制:

  • outer 执行结束后不会被回收
  • inner 仍然引用 outer 的变量

五、闭包作用

  1. 数据私有化

    function createCounter() {
      let count = 0;
    
      return {
        inc: () => ++count,
        get: () => count,
      };
    }
    
  2. 维持状态

用于:

  • 防抖节流
  • React hooks
  • 回调函数

六、缺点

👉 内存泄漏风险

原因:

  • 变量长期被引用

七、总结

闭包本质: “函数 + 词法环境的持久引用”