什么是函数柯里化

2021-08-25  本文已影响0人  晚饭总吃撑

今天看了一个关于函数式编程的文档很有意思,里面提到了函数柯里化,研究了一下,
函数柯里化的定义:是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。

通过上面的定义可以看出,柯里化是一个函数返回另一个函数,这是一个典型的闭包,它封装了一部分不变的内容,然后去处理其他可变的数据

例如我们在使用ajax的时候url是不变的,但是传递的参数不同将返回不同的数据,那么我们就可以把url封装到一个函数里然后返回一个带参数的函数,通过返回的函数去处理不同参数的情况

function requestCurry(url){
    return function(params){
        return new Promise((resolve,reject)=>{
            axios({
                method:"post",
                url:url,
                data:{
                    ...params
                }
            }).then(res=>{
                resolve(res)
            }).catch(err=>{
                reject(err)
            })
        })
    }
}

const userRequest = requestCurry("http://192.168.0.0.1/user")
//请求参数code为112
userRequest({
    code:112
}).then(res=>{
    //请求成功
    console.log(res)
})
//请求参数code为114
userRequest({
    code:114
}).then(res=>{
    //请求成功
    console.log(res)
})

上面的两个请求参数不同,但是请求的地址url是固定不变的。这就是柯里化,将不变的参数通过闭包的形式封装起来,然后去处理可变的参数
lodash中有一个柯里化方法curry。举个官网的例子:

var abc = function(a, b, c) {
  return [a, b, c];
};
var curried = _.curry(abc);
curried(1)(2)(3);
// => [1, 2, 3]
curried(1, 2)(3);
// => [1, 2, 3]
curried(1, 2, 3);
// => [1, 2, 3]

具体用法官网说明很清楚我就不再赘述了。

上一篇下一篇

猜你喜欢

热点阅读