js高階高階之函式柯里化

2021-10-02 03:13:08 字數 1404 閱讀 8135

函式柯里化是所有程式語言推崇的函式優化方式,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 是把接受多個引數的函式變換成接受乙個單一引數 最初函式的第乙個引數 的函式,並且返回接受餘下的引數而且返回結果的新函式的技術。例 記錄程式設計師乙個月的加班總時間,那麼好,我們首先要做的是記錄程式設計師每天加班的時間,然後把乙個月中每天的加班的時間相加,就得到了乙個...