闭包是 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 文档。