闭包是构建轻量、可复用、高性能计数器的核心手段,通过封装私有状态实现隔离、避免全局变量和类开销,并支持缓存与复合逻辑。
闭包能天然封装私有状态,让计数器不依赖全局变量或类实例,同时避免重复创建作用域开销,是构建轻量、可复用、高性能计数器的核心手段。
闭包通过捕获外部函数的局部变量(如 var count),使该变量脱离原始作用域生命周期——即使外层函数执行完毕,变量仍驻留在闭包环境中,对外不可见、不可篡改。
count 变量本身,仅通过返回的函数间接读写,杜绝外部误修改createCounter(10) 和 createCounter(100) 生成两个完全独立的状态空间计数器常见需求是“先返回当前值,再加 1”。这要求使用后缀递增操作符 count++,而非前缀 ++count。两者行为差异直接影响输出序列。
return count++:返回旧值,再自增 → 首次调用得 n,符合题设要求return ++count:先自增再返回 → 首次调用得 n + 1,不符合典型计数器语义若需批量生成多个计数器(例如在 for 循环中),直接捕获循环变量会导致所有闭包共享同一引用,最终全部指向循环结束后的值。
for (let i = 0; i i) } → 全部返回 3
const current = i; counters.push(() => current)
闭包捕获的不只是单个数字,还可以是对象、Map、数组等结构。这意味着你能在同一闭包中叠加缓存、限流、节流等能力,而无需额外管理生命周期。
count 和 lastUpdateTime,用于防抖统计cache = new Map(),将计数结果与耗时计算结果一并缓存