本篇文章主要是柯里化原理实现
lodash实现柯里化
const _ = require('lodash');
function getSum(num1, num2, num3) {
return num1 + num2 + num3
}
const curried = _.curry(getSum);
console.log(curried(1, 2, 3)); //6
console.log(curried(1, 2)(3)); //6
console.log(curried(1)(2, 3)); //66
使用原生代码实现
function curry(func) {
return function curriedFn(...args) {
//判断实参和形参的个数
if (args.length < func.length) {
return function(params) {
return curriedFn(...args.concat(Array.from(arguments)));
}
}
return func(...args)
}
}
const curried = curry(getSum);
console.log(curried(1, 2, 3)); //6
console.log(curried(1, 2)(3)); //6
console.log(curried(1)(2, 3)); //66
//箭头函数重写
const curry = (func) => {
const curriedFn = (...args) => {
if (args.length < func.length) {
return function(params) {
return curriedFn(...args.concat(Array.from(arguments)))
}
}
}
};
如有不足,敬请指教