JavaScript 函數(shù)柯里化

定義

柯里化是一種將使用多個參數(shù)的一個函數(shù)轉(zhuǎn)換成一系列使用一個參數(shù)的函數(shù)的技術(shù)吁峻。

function sum(num1, num2) {
  return num1 + num2;
}
// 執(zhí)行sum函數(shù) 栏渺,一次需傳入兩個參數(shù)
sum(1,2); //3
// 假設(shè)有一個curry函數(shù)做到柯里化
var sumCurry = curry(add);
addCurry(1)(2); // 3

柯里化用途

// ajax 示例
function ajax(type, url, data) {
    var xhr = new XMLHttpRequest();
    xhr.open(type, url, true);
    xhr.send(data);
}
// 雖然 ajax 這個函數(shù)非常通用魄咕,但在重復(fù)調(diào)用的時候參數(shù)冗余
ajax('POST', 'https://www.test.com', "name=kevin");
ajax('POST', 'https://www.test2.com', "name=kevin");
ajax('POST', 'https://www.test3.com', "name=kevin");

//利用curry
var ajaxCurry = curry(ajax);

// 以發(fā)送Post請求為例
var post = ajaxCurry('POST');
post('www.test.com', "name=kevin");

// 以POST類型請求來自于 https://www.test.com 的數(shù)據(jù)
var postFromTest = post('https://www.test.com');
postFromTest("name=kevin");
  • curry用途可以理解為: 參數(shù)復(fù)用胧弛,本質(zhì)上是降低通用性盘寡, 提升適用性楚殿。

例子二:

var arr = [{id:1, name: 'A'},{id:2, name: 'B'}];
// 獲取所有的name
var names = arr.map(item => {
  return item.name;  //這么寫為了突出 curry
})

如果柯里化

var prop = curry(function(k, item) {
  return item[k];
})
var names = arr.map(prop('name'));

為了獲取name這么麻煩, 但其實prop 方法可針對大量業(yè)務(wù)場景竿痰,多次使用脆粥,而且增加了代碼的可讀性。
arr.map(prop('name')) 就好像直白的告訴你:arr 對象遍歷(map)獲取(prop) name 屬性影涉。

實現(xiàn) sum curry

function sum(num1, num2) {
    return num1 + num2;
}

function curry(fn) {
  var args = [].slice.call(arguments, 1);
  return function () {
    return fn.apply(this, args.concat([].slice.call(arguments)));
  }
}

var sum1 = sum(1,2); //3
var sumCurry = curry(sum,1,2);
sumCurry(); //3
var sumCurry2 = curry(sum,1);
sumCurry2(2); // 3
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末变隔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子蟹倾,更是在濱河造成了極大的恐慌匣缘,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,002評論 6 519
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鲜棠,死亡現(xiàn)場離奇詭異肌厨,居然都是意外死亡,警方通過查閱死者的電腦和手機豁陆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,357評論 3 400
  • 文/潘曉璐 我一進店門柑爸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人盒音,你說我怎么就攤上這事竖配。” “怎么了里逆?”我有些...
    開封第一講書人閱讀 169,787評論 0 365
  • 文/不壞的土叔 我叫張陵进胯,是天一觀的道長。 經(jīng)常有香客問我原押,道長胁镐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,237評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮盯漂,結(jié)果婚禮上颇玷,老公的妹妹穿的比我還像新娘。我一直安慰自己就缆,他們只是感情好帖渠,可當(dāng)我...
    茶點故事閱讀 69,237評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著竭宰,像睡著了一般空郊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上切揭,一...
    開封第一講書人閱讀 52,821評論 1 314
  • 那天狞甚,我揣著相機與錄音,去河邊找鬼廓旬。 笑死哼审,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的孕豹。 我是一名探鬼主播涩盾,決...
    沈念sama閱讀 41,236評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼励背!你這毒婦竟也來了春霍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,196評論 0 277
  • 序言:老撾萬榮一對情侶失蹤椅野,失蹤者是張志新(化名)和其女友劉穎终畅,沒想到半個月后籍胯,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體竟闪,經(jīng)...
    沈念sama閱讀 46,716評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,794評論 3 343
  • 正文 我和宋清朗相戀三年杖狼,在試婚紗的時候發(fā)現(xiàn)自己被綠了炼蛤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,928評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡蝶涩,死狀恐怖理朋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情绿聘,我是刑警寧澤嗽上,帶...
    沈念sama閱讀 36,583評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站熄攘,受9級特大地震影響兽愤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,264評論 3 336
  • 文/蒙蒙 一浅萧、第九天 我趴在偏房一處隱蔽的房頂上張望逐沙。 院中可真熱鬧,春花似錦洼畅、人聲如沸吩案。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,755評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽徘郭。三九已至,卻和暖如春己儒,著一層夾襖步出監(jiān)牢的瞬間崎岂,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,869評論 1 274
  • 我被黑心中介騙來泰國打工闪湾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留冲甘,地道東北人。 一個月前我還...
    沈念sama閱讀 49,378評論 3 379
  • 正文 我出身青樓途样,卻偏偏與公主長得像江醇,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子何暇,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,937評論 2 361

推薦閱讀更多精彩內(nèi)容