JS函數(shù)柯里化

什么是函數(shù)柯里化(Currying)让虐?

官方定義:把一個接收多個參數(shù)的函數(shù)谍夭,設計成一個:接收單一參數(shù)的函數(shù)黑滴,并返回一個能夠接收剩余參數(shù)的新函數(shù),最后返回結果紧索。

1袁辈、簡單場景:求兩數(shù)之和

普通函數(shù)
    function addNum(a,b) {
        return a + b;
    }
    console.log("普通函數(shù)"+addNum(1,2)); //3
柯里化函數(shù)
   function addNumCurry(a) {
        return function (b) {
          return a+b //能獲取到a的值,是閉包的特性
        }
    }
    console.log("柯里化函數(shù)", addNumCurry(1)(2));//3
addNumCurry(1)(2), 有沒有感覺用法跟自執(zhí)行函數(shù)類似珠漂?
  (function ziZhiXing(a){
        console.log("自執(zhí)行函數(shù)",a) //自執(zhí)行函數(shù) 10
    })("10");

2晚缩、復雜場景:求 1-5 之和

  function addNumCurry(a) {
        return function (b) {
          return function (c) {
              return function (d) {
                  return function (e) {
                      return a+b+c+d+e
                  }
              }
          }
        }
    }
    console.log("柯里化函數(shù)", addNumCurry(1)(2)(3)(4)(5));//15
簡化寫法
function addNumCurry(a) {
        let numAll = a || 0; //存放數(shù)字和
        let fn =  function (b) {
            numAll = numAll + b
            return fn
        }
        //累加到最后一個后尾膊,自定義個結束屬性,也可以用原來就有的屬性
        fn.MyOver = function () {
            return numAll
        }
        return fn
    }
    console.log("柯里化函數(shù)",addNumCurry(1)(2)(3)(4)(5).MyOver());//15

3、進階場景:求 1-10 之和荞彼,每個里面參數(shù)不確定冈敛。例如 addNumCurry(1,2,3)(4,5)(6)(7,8)(9,10)

function addNumCurry(a) {
        let numAll = []; //存放數(shù)字和
        let _args = Array.prototype.slice.call(arguments); //存放第一次進去的參數(shù)
        numAll = [..._args]
        let fn =  function (b) {
            let _brgs = Array.prototype.slice.call(arguments);
            numAll = [...numAll,..._brgs]
            return fn
        }
        //累加到最后一個后,自定義個結束屬性,也可以用原來就有的屬性
        fn.MyOver = function () {
            //數(shù)組累加和 reduce
            return numAll.reduce((x,y)=>{
                return x+ y
            })
        }
        return fn
    }
    console.log("柯里化函數(shù)",addNumCurry(1,2,3)(4,5)(6)(7,8)(9,10).MyOver());//15
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末卿泽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子滋觉,更是在濱河造成了極大的恐慌签夭,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件椎侠,死亡現(xiàn)場離奇詭異第租,居然都是意外死亡,警方通過查閱死者的電腦和手機我纪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門慎宾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人浅悉,你說我怎么就攤上這事趟据。” “怎么了术健?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵汹碱,是天一觀的道長。 經(jīng)常有香客問我荞估,道長咳促,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任勘伺,我火速辦了婚禮跪腹,結果婚禮上,老公的妹妹穿的比我還像新娘飞醉。我一直安慰自己冲茸,他們只是感情好,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布缅帘。 她就那樣靜靜地躺著噪裕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪股毫。 梳的紋絲不亂的頭發(fā)上膳音,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天,我揣著相機與錄音铃诬,去河邊找鬼祭陷。 笑死苍凛,一個胖子當著我的面吹牛,可吹牛的內容都是我干的兵志。 我是一名探鬼主播醇蝴,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼想罕!你這毒婦竟也來了悠栓?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤按价,失蹤者是張志新(化名)和其女友劉穎惭适,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體楼镐,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡癞志,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了框产。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凄杯。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖秉宿,靈堂內的尸體忽然破棺而出戒突,到底是詐尸還是另有隱情,我是刑警寧澤描睦,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布妖谴,位于F島的核電站,受9級特大地震影響酌摇,放射性物質發(fā)生泄漏膝舅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一窑多、第九天 我趴在偏房一處隱蔽的房頂上張望仍稀。 院中可真熱鬧,春花似錦埂息、人聲如沸技潘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽享幽。三九已至,卻和暖如春拾弃,著一層夾襖步出監(jiān)牢的瞬間值桩,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工豪椿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留奔坟,地道東北人携栋。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像咳秉,于是被迫代替她去往敵國和親婉支。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內容

  • 在正式聊函數(shù)柯里化之前澜建,我這里給大家補充下高階函數(shù)的概念和應用: 1.1向挖、什么是高階函數(shù)?高階函數(shù)英文叫 High...
    天問_專注于大前端技術閱讀 3,760評論 0 6
  • 第一次看到柯里化這個詞的時候炕舵,還是在看一篇算法相關的博客提到把函數(shù)柯里化何之,那時一看這個詞就感覺很高端,實際上當你了...
    flowsands閱讀 232,562評論 40 282
  • 首先看看柯里化到底是什么幕侠? 維基百科上說道:柯里化帝美,英語:Currying(果然是滿滿的英譯中的既視感)碍彭,是把接受...
    指尖跳動閱讀 276評論 0 1
  • 什么是柯里化晤硕? 維基百科上說道:柯里化,英語:Currying(果然是滿滿的英譯中的既視感)庇忌,是把接受多個參數(shù)的函...
    Mica_馬超閱讀 255評論 0 2
  • 什么是函數(shù)柯里化舞箍? 在計算機科學中,柯里化(Currying)是把接受多個參數(shù)的函數(shù)變換成接受一個單一參數(shù)(最初函...
    jeff1804閱讀 365評論 0 1