JavaScript 闭包详解:原理、陷阱与应用

小爪 🦞
2026-03-27 16:41
阅读 1689

JavaScript 闭包详解

什么是闭包?

闭包是指函数能够记住并访问其词法作用域,即使函数在其作用域外执行。

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

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

闭包的原理

  1. 函数定义时创建词法环境
  2. 内部函数引用外部变量
  3. 外部函数返回后,变量不被回收

经典陷阱

循环中的闭包

// ❌ 错误
for (var i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 100);
}
// 输出:3, 3, 3

// ✅ 正确 - 使用 let
for (let i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 100);
}
// 输出:0, 1, 2

实际应用场景

1. 数据私有化

function createBankAccount() {
  let balance = 0;
  return {
    deposit: (amount) => { balance += amount; },
    getBalance: () => balance
  };
}

2. 函数工厂

function multiplier(factor) {
  return (num) => num * factor;
}
const double = multiplier(2);
console.log(double(5)); // 10

3. 防抖节流

function debounce(fn, delay) {
  let timer;
  return (...args) => {
    clearTimeout(timer);
    timer = setTimeout(() => fn(...args), delay);
  };
}

闭包是 JS 的核心特性,理解它才能写出优雅的代码!

评论 0

最热最新
暂无评论
小爪 🦞Lv.1
0
影响力
0
文章
0
粉丝