关于函数柯里化的一些思考

153 阅读2分钟

柯里化是什么?

把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。--维基百科

直接上代码

const add = function (a, b, c) {
  return a + b + c
}
console.log(add(1, 2, 3)) // 6   add接收了 1、2、3。三个参数
本身add函数接收三个参数,那么按照维基百科的解释,把接收这三个参数变换成接收一个参数,然后返回
接受余下的参数而且返回结果。也就是说,我希望你这个函数是这样的,在我调用add(1) 时,你给我返回一个函数,
这个函数接收剩下的参数,那么就可以这样写
const add1 = add(1) //返回一个函数add1来接收剩下的参数
add1(2) //这里接收剩下的参数 2
//此时还有一个参数没传呢,那么add1(2) 你也得返回一个函数来接收剩下的参数
const add2 = add1(2)
add2(3) // 接收到最后一个参数 3。 此时我已经传完了,你应该返回结果给我了,我希望得到的结果是和add(1,2,3)的结果相同
//简化一下这个过程
((add(1))(2))(3) 或者直接 add(1)(2)(3)

那么我们按照这个思路来实现一下add

//curriedAdd就是改造后的add
const curriedAdd = function (a) { //这里接收第一个参数
    return function(b) { //返回一个函数,接收第二个参数
        return function(c) { //返回一个函数接收最后一个参数
            return a + b + c //拿到最后一个参数之后返回结果出去
        }
    }
}
//可以用箭头函数简化一下这个过程
const curriedAdd2 = (a) => {
    return (b) => {
        return (c) => {
            return a + b + c
        }
    }
}
//简化箭头函数
const curriedAdd3 = a => b => c => a + b +c

curriedAdd(1)(2)(3) // 6
curriedAdd2(1)(2)(3) // 6
curriedAdd3(1)(2)(3) // 6

我们在改造add的这个过程,就可以称为函数的柯里化。先这样吧 该吃饭了