亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

關于JS函數柯里化

關于JS函數柯里化

慕碼人2483693 2018-12-18 17:15:39
1.js函數柯里化有什么好處呢?感覺看了一些網站的講解還是很模糊,比如:function add(a, b) {    return a + b;}function curryingAdd(a) {    return function(b) {        return a + b;    }}add(1, 2); // 3curryingAdd(1)(2); // 3都可以實現add功能,那柯里化的好處在哪呢?2.什么情況下要用柯里化呢?最好能舉一些簡單易懂的例子。
查看完整描述

1 回答

?
SMILET

TA貢獻1796條經驗 獲得超4個贊

curry函數可以接受一個函數,我們暫且稱之為原始函數,返回的也是一個函數,柯里化函數,這個返回的柯里化函數功能十分強大,他在執行的過程中,不斷的返回一個貯存了傳入參數的函數,直到觸發了原始函數執行的條件。這么說比較概括,那么就舉個例子來說明一下:

原始函數:

????var?add?=?(x,?y)?=>?x?+?y

柯里化函數:

????var?curryAdd?=?curry(add)

這個add需要兩個參數,但是我們的curryAdd執行可以傳入更少的參數,當傳入的參數少于add需要的參數的時候,add函數并不會執行,curryAdd就會將這個參數記下來,并且返回另外一個函數,這個函數可以繼續執行傳入參數,我們會有一個變量專門記錄傳入參數的情況,如果傳入參數的總數等于add需要參數的總數,我們就激活了原始參數執行,就會返回我們想要的結果。

? ? // 此時只傳入了一個參數 根據判斷返回的是一個函數

? ? var add2 = curryAdd(2)

? ? // add2 = function(...) {}

? ? // 此時累計傳入了兩個參數 等于了add需要參數的總和 所以返回的是一個結果

? ? // 相當于執行了add(2)(3)

? ? var result = add2(3)

? ? // result = 5

curry的原理實現

查看完整回答
反對 回復 2019-01-04
  • 1 回答
  • 0 關注
  • 465 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號