什么是函数柯里化?
柯里化是将接受多个参数的函数转换为一系列接受单个参数的函数的技术,返回这些已经预置了一些参数的新函数。这样做的好处是可以减少函数调用时的冗余信息,使得在某些情况下的调用更加方便。
如何将一个正常函数柯里化?
我们可以通过递归的方法编写一个柯里化函数生成器:
function sum(a,b,c,d,e,f){
return a+b+c+d+e+f
};
function curringGen(fn) {
return function curried(...args) {
//通过fn.length可以获取到函数的参数个数
//当传入参数大于函数本身需要的参数时候,执行
if (fn.length <= args.length) {
return fn.apply(this, args)
} else {
return function (...args2) {
return curried.apply(this, [...args, ...args2])
}
}
}
}
let adder = curringGen(sum)
//可以依次调用adder进行参数传递
console.log(adder(1)(2)(3)(4)(5))
console.log(adder(1)(2,3)(4)(5))
//也可以提前传入预设的值,之后再进行剩余参数的调用
let adderLast = curringGen(sum)(1,2,3,4)
console.log(adderLast(5))