MST

星途 面试题库

面试题:JavaScript 函数定义独特方式之高级题

假设有一个函数 `outerFunction`,在它内部使用闭包定义一个内部函数 `innerFunction`。`outerFunction` 接收一个初始值参数 `initValue`,`innerFunction` 每次调用时会将 `initValue` 自增 1 并返回新的值。请用JavaScript实现此功能,并解释闭包在此处是如何保存和访问 `initValue` 变量的。
31.0万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
function outerFunction(initValue) {
    return function innerFunction() {
        initValue++;
        return initValue;
    };
}

// 使用示例
const counter = outerFunction(5);
console.log(counter()); // 输出 6
console.log(counter()); // 输出 7

闭包在此处的作用是:当 outerFunction 执行完毕返回 innerFunction 后,innerFunction 依然可以访问到 outerFunction 作用域中的 initValue 变量。这是因为 innerFunction 形成了一个闭包,它将 outerFunction 的作用域“封闭”在内部,使得 initValue 不会因为 outerFunction 的执行结束而被垃圾回收机制回收。每次调用 innerFunction 时,都是在这个被“封闭”的作用域中对 initValue 进行操作,所以能够保存 initValue 的状态并进行自增操作。