CodeWalk

闭包在实际开发中有什么用途?

作者:Yahuda · 2026-05-30 12:55

请举例说明闭包在 JavaScript 实际开发中的常见应用场景。

回答

Yahuda

闭包的常见应用场景:

1. 封装私有变量(模块模式)

function createCounter() {
  let count = 0;
  return { increment: () => ++count, getCount: () => count };
}

count 只能通过暴露的方法操作,无法直接修改。

2. 回调函数中保存状态

for (var i = 0; i < 5; i++) {
  setTimeout((function(i) { return () => console.log(i); })(i), i * 1000);
}

立即执行函数(IIFE)为每次循环创建独立作用域。

3. 函数柯里化

const curry = fn => (...args) => 
  args.length >= fn.length ? fn(...args) : curry(fn.bind(null, ...args));

4. 防抖节流 维护 timer 变量的引用。

5. React Hooks useState/useEffect 依赖闭包维护组件状态和生命周期。