function accumulatorFactory(func) {
let sum = 0;
return function accumulator(num) {
sum = func(sum, num);
return sum;
};
}
// 使用示例
const add = function(a, b) { return a + b; };
const myAccumulator = accumulatorFactory(add);
console.log(myAccumulator(5)); // 输出 5
console.log(myAccumulator(3)); // 输出 8
闭包的作用
- 数据封装与保护:闭包可以让内部函数访问外部函数作用域中的变量(这里是
sum
),同时外部代码无法直接访问和修改sum
,实现了数据的封装和保护。
- 状态保持:每次调用返回的
accumulator
函数时,它都能记住上一次调用后的sum
值,因为sum
在闭包的作用域内,其状态得以保持。
可能存在的内存问题
- 内存泄漏:由于闭包会使得外部函数作用域中的变量(如
sum
)一直被引用,不会被垃圾回收机制回收。如果这个闭包函数一直存在且没有被正确释放,可能会导致内存泄漏,占用过多内存。例如,若accumulator
函数在全局作用域中被长期持有,且不再需要使用其累加功能时,sum
等变量依然占据内存空间。