柯里化
定义:把一个多参数的函数转化为单参数函数的方法。
- js实现无函数版本的柯里化
例子:curryingadd(2)(1, 3, 4)(2, 3)(3)(4, 6)(7, 98);
function curryingadd() {
let args = Array.from(arguments);
let innerAdd = function () {
let argsinner = Array.from(arguments);
// 如果此时内部没有参数了也就是 f(...arg)() 就直接返回值即可
if (argsinner.length == 0) {
return args.reduce((prev, cur) => {
return prev + cur;
});
} else {
// 这里使用了闭包 因为args是外部定义的 所以递归时可以累计存储变量
args.push(...arguments);
return innerAdd;
}
};
innerAdd.toString = function () {
return args.reduce((prev, curr) => {
return prev + curr;
}, 0);
};
return innerAdd;
}
let res = curryingadd(2)(1, 3, 4)(2, 3)(3)(4, 6)(7, 98);//133
let res1= curryingadd(2)(1, 3, 4)(2, 3)(3)(4, 6)(7, 98)();
- js实现函数版本的柯里化
如:curry(add1)(1, 2)(3)
function add1(x, y, z) {
return x + y + z;
}
const curry = (fn, ...args) =>
// 函数的参数个数可以直接通过函数数的.length属性来访问
args.length >= fn.length // 这个判断很关键!!!
// 传入的参数大于等于原始函数fn的参数个数,则直接执行该函数
? fn(...args)
/**
* 传入的参数小于原始函数fn的参数个数时
* 则继续对当前函数进行柯里化,返回一个接受所有参数(当前参数和剩余参数) 的函数
*/
: (..._args) => curry(fn, ...args, ..._args);
console.log(curry(add1)(1, 2)(3));//6
挑战更文100天-----第二天
版权声明:本文为weixin_46015250原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。