偏函数
偏函数就是将一个函数的参数固定后包装为一个新函数,通过给新函数传入参数来调用原来的函数。
function add(a, b) {
return a + b;
}
function addTwo(num) {
return add(2, num);
}
console.log(addTwo(3));
有点类似设计模式里适配器模式。
柯里化
在偏函数的基础上加上了闭包的思想,通过在函数中返回一个函数来实现:
function curryAdd(num) {
return function (onum) {
return num + onum;
};
}
let addTwo = curryAdd(2);
console.log(addTwo(3)); // 5
更高级的写法,这样固定了函数一个或多次传入的值的总数量
function curriedIt(func) {
return function curriedFn(...arg) {
if (arg.length < func.length) {
//如果收集参数数量小于形参个数,返回一个新函数,用来调用自己
return function (...newArg) {
return curriedFn(...arg.concat(newArg));
};
}
return func(...arg);
};
}
let curriedAdd = curriedIt((a, b, c) => {
return a + b + c;
});
console.log(curriedAdd(1)(2)(3));
console.log(curriedAdd(1, 2)(3));