闭包计数器通过函数作用域封装私有变量count,提供increment、decrement等方法控制访问,支持多实例独立状态及初始值、步长配置,实现状态安全与接口分离。

用闭包实现计数器,核心是利用函数作用域隔离变量,让计数状态不被外部直接修改,同时提供可控的访问接口。
封装私有计数变量
把 count 声明在外部函数内部,外部无法直接读写它,只能通过返回的函数间接操作:
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
支持多种操作的增强版计数器
返回一个对象,暴露 increment、decrement、getValue 等方法,仍保持 count 的私有性:
function createCounter() {
let count = 0;
return {
increment() { count++; },
decrement() { count--; },
getValue() { return count; },
reset() { count = 0; }
};
}
const c = createCounter();
c.increment();
c.increment();
console.log(c.getValue()); // 2
c.decrement();
console.log(c.getValue()); // 1
多个独立计数器互不干扰
每次调用 createCounter() 都生成新的闭包环境,每个实例拥有自己的 count:
- counter1 和 counter2 各自维护独立状态
- 修改其中一个,不影响另一个
- 这是闭包“保存词法环境”的典型体现
const counter1 = createCounter(); const counter2 = createCounter(); counter1.increment(); counter1.increment(); console.log(counter1.getValue()); // 2 console.log(counter2.getValue()); // 0
可配置初始值与步长
让闭包更灵活:接受参数,在闭包内形成定制化的私有状态:
function createCounter(initial = 0, step = 1) {
let count = initial;
return {
next() {
const value = count;
count += step;
return value;
},
reset() { count = initial; }
};
}
const seq = createCounter(10, 2);
console.log(seq.next()); // 10
console.log(seq.next()); // 12
console.log(seq.next()); // 14
闭包计数器的关键不在“计数”本身,而在于它自然实现了状态封装与接口分离——变量安全、行为可控、实例独立。不复杂但容易忽略。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











