国产探花免费观看_亚洲丰满少妇自慰呻吟_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函數。我會實現這樣的函數,但是現在,我們首先看看為什么這樣的函數是如此必要。
舉個例子,手動柯里化一個函數并不困難,但是確實有點

主站蜘蛛池模板: 木里| 当阳市| 彩票| 临清市| 依兰县| 罗江县| 荆州市| 广平县| 芦溪县| 阳东县| 临高县| 班戈县| 米脂县| 莱州市| 南安市| 额尔古纳市| 苏尼特左旗| 松滋市| 江达县| 满洲里市| 藁城市| 雅江县| 利川市| 山阴县| 临泉县| 南投市| 苏尼特右旗| 岳西县| 天峻县| 克拉玛依市| 遂川县| 运城市| 灵山县| 汝城县| 乌鲁木齐市| 徐闻县| 延川县| 唐山市| 永城市| 开平市| 原阳县|