概念:
柯里化是把接收多个参数的函数,变成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数,而且返回结果的新函数的技术。
示例如下图:
作用:
1.让函数的职责尽可能单一
函数式编程中,一般希望一个函数处理的问题尽可能的单一,而不是将一大堆的处理过程交给一个函数来处理。这么做的好处在于可以把复杂的逻辑抽离出来,放在单独的一个函数中处理,每个函数单独处理一部分逻辑并返回一个函数,在返回的函数中再处理一部分逻辑。
2.逻辑复用
3.可定制化函数
柯里化函数的实现:
在实际开发中,我们不可能每一次遇到一个需要柯里化的函数后就自己手动把这个函数转化为柯里化函数,因此我们需要写一个工具函数,来代替我们实现柯里化函数,每次需要用到的时候只需要调用它即可。以下是实现过程。
function currying(fn) {
function curried(...args) {
// 判断当前已经接受的参数的个数 判断参数本身需要接受的参数是否已经一致
// 1.当已经传入的参数大于等于需要的参数时 则执行函数
if (args.length >= fn.length) {
return fn.apply(this, args)
} else {
// 没有达到个数时 需要返回一个新的函数 继续来接受参数
function curried2(...args2) {
// 接收到参数以后 需要递归调用curried来检查函数的参数个数是否达到
return curried.apply(this, args.concat(args2))
}
return curried2
}
}
return curried
}
调用方法: