函式柯里化是所有程式語言推崇的函式優化方式,js的函式柯里化是你寫出優雅函式的基礎。
例如最簡單的例子:求 (15+3)*4的值
let calcu = (a, b, c) => (a+b)*c;
function curry(fn, args)}}
let add = curry(calcu);
console.log(add(15)(3)(5)); //72
在上面的**中,我們使用curry函式它可以不用一次性接收三個引數,而是慢慢接收,當發現接收到的引數達到3個之後再返回結果。這就是引數復用(通過例子我們可以看到,實現這個特點主要原因是利用了閉包,將接收到的引數存於_args中,由於閉包的原因這些引數在函式執行完之後並不會被釋放掉。
上面的curry方法,將每次呼叫fn時讀入的引數用args來儲存,並將本次讀入的引數args與當前一共擁有的所有引數_args用concat方法連線起來,當引數個數符合fn的引數個數要求時,則呼叫fn。
引數復用案例:
// 正常正則驗證字串 reg.test(txt)
// 函式封裝後
function check(reg, txt)
check(/\d+/g, 'test') //false
check(/[a-z]+/g, 'test') //true
// currying後
function curryingcheck(reg)
}var hasnumber = curryingcheck(/\d+/g)
var hasletter = curryingcheck(/[a-z]+/g)
hasnumber('test1') // true
hasnumber('testtest') // false
hasletter('21212') // false
提前確認:
var on = function(issupport, element, event, handler) else
}
延遲執行:
function.prototype.bind = function (context)
}
函式柯里化是乙個比較難以應用的方法,最主要是能夠理解其原理使你閱讀原始碼無障礙,下面給出乙個柯里化的最佳實現方法,背過他可以救急
// 支援多引數傳遞
function progresscurrying(fn, args)
// 引數收集完畢,則執行fn
}}
高階JS 函式柯里化
什麼是函式柯里化?在電腦科學中,柯里化 currying 是把接受多個引數的函式變換成接受乙個單一引數 最初函式的第乙個引數 的函式,並且返回接受餘下的引數且返回結果的新函式的技術。通俗點說就是將乙個函式拆分成多個函式,是固定部分引數,返回乙個接受剩餘引數的函式,也稱為部分計算函式,目的是為了縮小適...
js基礎高階 函式柯里化carrying
函式柯里化就是建立已經設定單個引數或者多個引數的函式,函式變為接受乙個引數,返回乙個值 function add 返回傳進來的實參之和 return mun function carrying fn var a1 carrying add,4,6,7 4,6,7 為復用引數 這裡的a1為carryi...
高階函式 函式柯里化與反柯里化
一 函式柯里化 currying 是把接受多個引數的函式變換成接受乙個單一引數 最初函式的第乙個引數 的函式,並且返回接受餘下的引數而且返回結果的新函式的技術。例 記錄程式設計師乙個月的加班總時間,那麼好,我們首先要做的是記錄程式設計師每天加班的時間,然後把乙個月中每天的加班的時間相加,就得到了乙個...