网易面试题: 实现一个无限累加函数:
sum(1,2)(3,4)(5)();
考点: 函数科里化
递归定义出口:
- 收集参数,
- 根据参数不同的情况采取不同的策略
function curry(fn, ...args1) {
return function (...args2) {
let allArgs = [...args1, ...args2];
if(args2.length === 0) {
// 求和
return fn(...allArgs);
} else {
// 科利华收集参数
return curry(fn, ...allArgs);
}
}
}
function sum(...args) {
let res = 0;
for(let i of args) {
res += i;
}
return res;
}
let add = curry(sum);
console.log(add(1, 2)(3)(4)(5, 6)(7)());