MST

星途 面试题库

面试题:JavaScript中闭包与递归函数基础应用

请用JavaScript实现一个闭包函数,使得该闭包可以实现计数器功能,每次调用返回递增后的结果。同时,请用递归函数实现计算1到100的累加和,并阐述闭包和递归函数在这个过程中的作用及原理。
45.3万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

1. 实现闭包计数器

function counter() {
    let count = 0;
    return function() {
        return ++count;
    };
}
const myCounter = counter();
console.log(myCounter()); // 输出 1
console.log(myCounter()); // 输出 2

2. 递归函数计算1到100的累加和

function sumRecursive(num) {
    if (num === 1) {
        return 1;
    } else {
        return num + sumRecursive(num - 1);
    }
}
const result = sumRecursive(100);
console.log(result); // 输出 5050

3. 闭包和递归函数的作用及原理

  • 闭包
    • 作用:在计数器的实现中,闭包用于封装一个局部变量count,使其在函数外部仍然能够被访问和修改,同时避免了全局变量带来的命名冲突等问题。
    • 原理:闭包函数内部引用了外部函数作用域中的变量count,即使外部函数执行完毕,count也不会被垃圾回收机制回收,因为闭包函数持有对它的引用。每次调用闭包函数,都会访问和修改这个持久化的count变量,实现了计数器的功能。
  • 递归函数
    • 作用:在计算1到100累加和的过程中,递归函数通过将大问题分解为相同结构的小问题,简化了代码逻辑。它不断调用自身,每次调用时减少问题的规模,直到达到终止条件。
    • 原理:递归函数在每次调用自身时,会将当前的状态(如当前的数字num)传递下去。在递归调用的过程中,函数调用栈会不断累积,当达到终止条件(num === 1)时,开始从栈顶依次返回结果并进行累加,最终得到1到100的累加和。