函数柯里化实现
柯里化(Currying)是一种关于函数的高阶技术。它不仅被用于 JavaScript,还被用于其他编程语言。
柯里化是一种函数的转换,它是指将一个函数从可调用的 f(a, b, c) 转换为可调用的 f(a)(b)(c)。
柯里化不会调用函数。它只是对函数进行转换。
// 功能: 传入一个函数 将该函数自动柯里化
/**
*
* @param {Function} fn
*/
function currying(fn) {
//返回柯里化后的函数
//此函数可接受部分参数
return function curryed(...args) {
//如果此时函数接收的参数大于目标参数长度 则直接调用该函数\
if (fn.length <= args.length) {
console.log([...args]);
return fn.apply(this, [...args]);
} else {
//如果此时函数接收的参数小于目标的参数长度 则返回一个函数 该函数可再次接收剩余参数
return function (...argsed) {
return curryed.apply(this, [...args, ...argsed]);
};
}
};
}
function add(num1, num2, num3, num4, num5) {
return Array.prototype.reduce.call(arguments,((p,c) => p=p+c),0);
}
var curryAdd = currying(add);
console.log(curryAdd(1, 2, 3, 4, 5));
console.log(curryAdd(1, 2)(3, 4, 5));
console.log(curryAdd(1)(2)(3)(4)(5));
输出结果:
df1d0c0b25c7a0d5b25a3124d0c62c84