JavaScript 怎样创建一个闭包函数

作者:Administrator 发布时间: 2026-05-09 阅读量:5 评论数:0

闭包(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

解释

  • createCounter 执行后返回了内部匿名函数。

  • 内部函数引用了外部函数的变量 count,即使 createCounter 已经执行完毕,count 依然被保留在内存中,因为内部函数持有对它的引用。

  • 每次调用 counter(),都会修改并返回同一个 count 变量。

另一种常见形式:立即执行函数(IIFE)创建闭包

const add = (function() {
  let sum = 0;
  return function(x) {
    sum += x;
    return sum;
  };
})();

console.log(add(5)); // 5
console.log(add(3)); // 8

闭包的作用

  • 数据私有化:外部无法直接访问 count,只能通过返回的函数操作。

  • 保持状态:函数调用之间共享同一个变量。

  • 回调与事件处理:常用于异步操作中保留上下文。

注意事项

  • 闭包会占用更多内存,因为被引用的变量不会被垃圾回收,直到闭包本身不再被引用。

  • 循环中创建闭包时,注意变量共享问题(通常用 let 或 IIFE 解决)。

总结:在函数内部定义函数,并让内部函数访问外部函数的变量,然后将内部函数暴露出去,就创建了一个闭包

评论