函数柯里化
什么是函数柯里化
函数柯里化就是把一个具有n个参数的函数转变成为可以进行二次甚至n次调用执行的函数,也就是说将函数的n个参数分1~n次传入,在n个参数传入完成后一次性执行这个函数
固定参数个数函数的科柯里化
原始函数,已知参数的个数
例如:add(1, 2, 3, 4)柯里化
function add (a, b, c, d) {
return a + b + c + d;
}
分析:首先我们可以看出这个函数的参数长度是固定,那我们柯里化的方案是
function currying(fn) {
const len = fn.length; // 获取原始函数参数的个数
const args = [];
return function _a (...param) {
args.push(...param);
console.log(args);
if(args.length < len) {
return _a;
}
else {
return fn.apply(this, args.splice(0, len));
}
}
}
调用:
const addCurry = currying(add);
const result = addCurry(1)(2)(3)(4);
未知参数个数的函数柯里化
原始函数,不知道有多少个参数 例如:addMore(1, 2, 3 , ……, 1000, ……,n)柯里化
function addMore (...params) {
return params.reduce((pre, next) => pre + next, 0);
}
分析:addMore函数的参数长度是不固定,那么柯里化的方案是
function currying (fn) {
const args = [];
return function _a (...param) {
if(param.length) {
args.push(...param);
return _a;
}
else {
const len = args.length;
return fn.apply(this, args.splice(0, len))
}
}
}
const addCurry = currying(addMore);
const result = addCurry(1,2)(12)(); // 注意最后一次调用不能有参数