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的累加和。