知识分享空间

记录学习历程,分享技术心得

JavaScript 中的闭包详解

2026-07-05 | JavaScript | 前端

闭包的定义

闭包(Closure)是指一个函数能够记住并访问其词法作用域,即使该函数在其词法作用域之外执行。简单来说,闭包就是"函数 + 函数能够访问的外部变量"的组合。

基本示例

function createCounter() {
    let count = 0;
    return function() {
        count++;
        return count;
    };
}

const counter = createCounter();
console.log(counter()); // 1
console.log(counter()); // 2
console.log(counter()); // 3

在上面的例子中,内部匿名函数持有对 count 变量的引用,即使 createCounter 已经执行完毕,count 仍然存在并被内部函数访问。

实际应用场景

闭包常用于数据封装和模块化。例如,可以创建一个简单的缓存函数:

function memoize(fn) {
    const cache = {};
    return function(arg) {
        if (cache[arg] === undefined) {
            cache[arg] = fn(arg);
        }
        return cache[arg];
    };
}

const slowSquare = n => { /* 耗时计算 */ return n * n; };
const fastSquare = memoize(slowSquare);

注意事项

闭包会持有对外部变量的引用,如果使用不当可能导致内存泄漏。在不再需要时,应及时解除引用。此外,循环中使用闭包时要特别注意变量的作用域问题,ES6 的 let 关键字可以有效解决这类问题。