MST

星途 面试题库

面试题:JavaScript 函数作为参数的闭包问题探讨

编写一个 JavaScript 高阶函数,该函数接收一个函数作为参数,并在内部返回另一个函数,要求新返回的函数形成闭包且能够正确累加每次传入的值。请分析闭包在此处的作用以及可能存在的内存问题。
14.2万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
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

闭包的作用

  1. 数据封装与保护:闭包可以让内部函数访问外部函数作用域中的变量(这里是sum),同时外部代码无法直接访问和修改sum,实现了数据的封装和保护。
  2. 状态保持:每次调用返回的accumulator函数时,它都能记住上一次调用后的sum值,因为sum在闭包的作用域内,其状态得以保持。

可能存在的内存问题

  1. 内存泄漏:由于闭包会使得外部函数作用域中的变量(如sum)一直被引用,不会被垃圾回收机制回收。如果这个闭包函数一直存在且没有被正确释放,可能会导致内存泄漏,占用过多内存。例如,若accumulator函数在全局作用域中被长期持有,且不再需要使用其累加功能时,sum等变量依然占据内存空间。