什么是函數(shù)柯里化

今天看了一個關于函數(shù)式編程的文檔很有意思,里面提到了函數(shù)柯里化,研究了一下,
函數(shù)柯里化的定義:是把接受多個參數(shù)的函數(shù)變換成接受一個單一參數(shù)(最初函數(shù)的第一個參數(shù))的函數(shù),并且返回接受余下的參數(shù)而且返回結果的新函數(shù)的技術。

通過上面的定義可以看出,柯里化是一個函數(shù)返回另一個函數(shù),這是一個典型的閉包,它封裝了一部分不變的內容,然后去處理其他可變的數(shù)據(jù)

例如我們在使用ajax的時候url是不變的,但是傳遞的參數(shù)不同將返回不同的數(shù)據(jù),那么我們就可以把url封裝到一個函數(shù)里然后返回一個帶參數(shù)的函數(shù),通過返回的函數(shù)去處理不同參數(shù)的情況

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")
//請求參數(shù)code為112
userRequest({
    code:112
}).then(res=>{
    //請求成功
    console.log(res)
})
//請求參數(shù)code為114
userRequest({
    code:114
}).then(res=>{
    //請求成功
    console.log(res)
})

上面的兩個請求參數(shù)不同,但是請求的地址url是固定不變的。這就是柯里化,將不變的參數(shù)通過閉包的形式封裝起來,然后去處理可變的參數(shù)
lodash中有一個柯里化方法curry。舉個官網(wǎng)的例子:

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]

具體用法官網(wǎng)說明很清楚我就不再贅述了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容