JavaScript 闭包深入理解

闭包是 JavaScript 中一个非常核心且经常被误解的概念。简单来说,闭包是指一个函数能够记住并访问它的词法作用域,即使这个函数在它的词法作用域之外执行。

1. 什么是闭包?

从技术角度讲,所有 JavaScript 函数都是闭包。但通常我们讨论的是那些嵌套函数,并且内部函数引用了外部函数的变量。

function outer() {
  let message = "Hello";
  function inner() {
    console.log(message);
  }
  return inner;
}
const myFunc = outer();
myFunc(); // 输出 "Hello" —— 这就是闭包

2. 常见应用场景

闭包常用于数据封装、创建模块、函数柯里化等。例如模拟私有变量:

function createCounter() {
  let count = 0;
  return {
    increment: () => ++count,
    decrement: () => --count,
    getCount: () => count
  };
}
const counter = createCounter();
console.log(counter.increment()); // 1

3. 注意事项

闭包会导致外部函数的变量一直存在于内存中,使用不当可能造成内存泄漏。在不需要时,应手动解除引用。

本文仅为个人学习记录,更多细节请查阅 MDN 文档。

← 返回首页