国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

深入解析JavaScript中函數的Currying柯里化

2019-11-20 10:22:11
字體:
來源:轉載
供稿:網友

引子
先來看一道小問題:
有人在群里出了到一道題目:
var s = sum(1)(2)(3) ....... 最后 alert(s) 出來是6 
var s = sum(1)(2)(3)(4) ....... 最后 alert(s) 出來是10 
問sum怎么實現?
剛看到題目,我第一反應是sum返回的是一個function,但是沒有最終實現,印象中看到過類似的原理,但是記不清了。
 
后來同事說,這個是叫柯里化,
實現方法比較巧妙:
 

function sum(x){  var y = function(x){   return sum(x+y)  }  y.toString = y.valueOf = function(){   return x;  }  return y; } 

下面我們就深入來看一下currying柯里化~

什么是柯里化?

柯里化是這樣的一個轉換過程,把接受多個參數的函數變換成接受一個單一參數(注:最初函數的第一個參數)的函數,如果其他的參數是必要的,返回接受余下的參數且返回結果的新函數。

當我們這么說的時候,我想柯里化聽起來相當簡單。JavaScript中是怎么實現的呢?
假設我們要寫一個函數,接受3個參數。

var sendMsg = function (from, to, msg) { alert(["Hello " + to + ",", msg, "Sincerely,", "- " + from].join("/n"));};

現在,假定我們有柯里化函數,能夠把傳統的JavaScript函數轉換成柯里化后的函數:

var sendMsgCurried = curry(sendMsg); // returns function(a,b,c) var sendMsgFromJohnToBob = sendMsgCurried("John")("Bob"); // returns function(c) sendMsgFromJohnToBob("Come join the curry party!"); //=> "Hello Bob, Come join the curry party! Sincerely, - John"

手動柯里化

在上面的例子中,我們假定擁有神秘的curry函數。我會實現這樣的函數,但是現在,我們首先看看為什么這樣的函數是如此必要。
舉個例子,手動柯里化一個函數并不困難,但是確實有點

主站蜘蛛池模板: 周至县| 文山县| 永川市| 竹北市| 改则县| 晋宁县| 连平县| 定襄县| 通海县| 辽源市| 广平县| 南乐县| 鄂尔多斯市| 桂阳县| 南开区| 长丰县| 阳朔县| 平安县| 甘德县| 鸡泽县| 保山市| 始兴县| 兴宁市| 渑池县| 义马市| 教育| 潮安县| 普兰店市| 青河县| 咸阳市| 宁蒗| 吉安市| 三原县| 枣强县| 方正县| 溧阳市| 牙克石市| 晋中市| 三门峡市| 慈利县| 忻城县|