摘要:關于柯里化的概念,網上資料也比較多,這里就不再贅述,我們先來看幾個簡單的例子需求求三個數的和解法解法使用了化,其實柯里化可以簡單地理解為將原來接受兩個參數的函數變成新的接受一個參數的過程,新的函數返回一個以原有第二個參數為參數的函數。
關于柯里化的概念,網上資料也比較多,這里就不再贅述,我們先來看幾個簡單的例子
需求求三個數的和
解法:1、
function add(a, b, c) { return a + b +c; } console.log(add(5, 10, 15));
const curryAdd = function(a) { return function(b) { return function(c) { return a + b + c; } } } const curryResult = curryAdd(5)(10)(15); console.log(curryResult); const add5 = curryAdd(5); const add10 = add5(10); console.log(add10(15));
解法2使用了 curry 化,其實柯里化可以簡單地理解為將原來接受兩個參數的函數變成新的接受一個參數的過程,新的函數返回一個以原有第二個參數為參數的函數。
為什么要使用 curry 化從前面的例子對比來看,curry 化咋一看比簡單的函數使用起來還有復雜,為什么我們還要大費周章去使用它,其實 curry 化有幾個有點:
參數復用
如上面的例子中,返回新的函數保留了對原先函數參數的引用,每次調用計算不必重新傳入
提前返回,性能優化
關于這個,我們看個簡單的例子--事件綁定
var addEvent = function() { if(window.addEventListener) { el.addEventListener(type, function(e) { fn.call(el, e); }, capture) }else if(window.attachEvent) { el.attachEvent("on" + type, function() { fn.call(el, e); }, capture) } };
以上例子中需要根據瀏覽器的兼容性進行事件綁定,每次綁定事件都需要判斷一次
改進后:
var addEvent = (function() { if(window.addEventListener) { return function(el, type, fn, capture) { el.addEventListener(type, function(e) { fn.call(el, e); }, capture) } }else if(window.attachEvent) { return function(el, type, fn, capture) { el.attachEvent("on" + type, function() { fn.call(el, e); }, capture) } } })();
通過自調用函數返回一個新的函數,判斷邏輯只執行了一次
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/99441.html
摘要:柯里化通用式上面的柯里化函數沒涉及到高階函數,也不具備通用性,無法轉換形參個數任意或未知的函數,我們接下來封裝一個通用的柯里化轉換函數,可以將任意函數轉換成柯里化。 showImg(https://segmentfault.com/img/remote/1460000018998373); 閱讀原文 前言 在 JavaScript 中,柯里化和反柯里化是高階函數的一種應用,在這之前...
摘要:函數柯里化是把支持多個參數的函數變成接收單一參數的函數,并返回一個函數能接收處理剩余參數,而反柯里化就是把參數全部釋放出來。但在一些復雜的業務邏輯封裝中,函數柯里化能夠為我們提供更好的應對方案,讓我們的函數更具自由度和靈活性。 showImg(https://segmentfault.com/img/bVburN1?w=800&h=600); 柯里化(Curring, 以邏輯學家Has...
摘要:作為函數式編程語言,帶來了很多語言上的有趣特性,比如柯里化和反柯里化。在一些函數式編程語言中,會定義一個特殊的占位變量。個人理解不知道對不對延遲執行柯里化的另一個應用場景是延遲執行。不斷的柯里化,累積傳入的參數,最后執行。作為函數式編程語言,JS帶來了很多語言上的有趣特性,比如柯里化和反柯里化。 這里可以對照另外一篇介紹 JS 反柯里化 的文章一起看~ 1. 簡介 柯里化(Currying)...
摘要:作為函數式編程語言,帶來了很多語言上的有趣特性,比如柯里化和反柯里化。個人理解不知道對不對延遲執行柯里化的另一個應用場景是延遲執行。不斷的柯里化,累積傳入的參數,最后執行。 作為函數式編程語言,JS帶來了很多語言上的有趣特性,比如柯里化和反柯里化。 這里可以對照另外一篇介紹 JS 反柯里化 的文章一起看~ 1. 簡介 柯里化(Currying),又稱部分求值(Partial Evalu...
摘要:如果你對函數式編程有一定了解,函數柯里化是不可或缺的,利用函數柯里化,可以在開發中非常優雅的處理復雜邏輯。同樣先看簡單版本的方法,以方法為例,代碼來自高級程序設計加強版實現上面函數,可以換成任何其他函數,經過函數處理,都可以轉成柯里化函數。 我們經常說在Javascript語言中,函數是一等公民,它們本質上是十分簡單和過程化的。可以利用函數,進行一些簡單的數據處理,return 結果,...
摘要:函數被轉化之后得到柯里化函數,能夠處理的所有剩余參數。因此柯里化也被稱為部分求值。那么函數的柯里化函數則可以如下因此下面的運算方式是等價的。而這里對于函數參數的自由處理,正是柯里化的核心所在。額外知識補充無限參數的柯里化。 showImg(https://segmentfault.com/img/remote/1460000008493346); 柯里化是函數的一個比較高級的應用,想要...
閱讀 1144·2021-11-25 09:43
閱讀 1578·2021-10-25 09:47
閱讀 2475·2019-08-30 13:46
閱讀 760·2019-08-29 13:45
閱讀 1289·2019-08-26 13:29
閱讀 2996·2019-08-23 15:30
閱讀 1111·2019-08-23 14:17
閱讀 1333·2019-08-23 13:43