函数柯里化
函数柯里化是把接受多个参数的函数转化为接收单个参数的函数
简单的例子:
// 普通函数
function sum(x, y) {
return x + y;
}
console.log(sum(1, 2)); // 结果输出3
// 柯里化
function curry(x) {
return function(y) {
return x + y
}
}
console.log(curry(1)(2)); // 结果也是输出3
显然,柯里化之后函数return函数,只需要一次传入一个参数,最终会返回最后的值,但是要是有n个参数,要是手动return n个函数显然不靠谱,所以我们可以换一个方式:统计传进来的参数个数,然后使用递归的方式处理
代码如下:
function curryMaker(max) { // max -- 最大传参数
let nums = []
return function currySum(...args) {
nums.push(...args);
if(nums.length >= max) {
const res = nums.slice(0, max).reduce((prev, next) => {return prev + next}, 0);
nums = [];
return res
} else {
return currySum
}
}
}
const currySum = curryMaker(6);
const sumCurry = currySum(1, 2)(3, 4, 5)(6, 7);
console.log(sumCurry ); // 21
欢迎各位指正,并给出更好的方法