js 常見方法實現 函式柯里化實現

2021-10-04 03:09:56 字數 1558 閱讀 5357

通用實現

function

curry

(fn,

...args)

}

對於如何理解curring的實現 暫時參照js中的柯里化 及 精巧的自動柯里化實現

有空會更深入的理解一下

概念(wiki): curring 是把接受多個引數的函式變成接受乙個單一引數(最初函式的第乙個引數)的函式,並且返回接受餘下的引數而且返回結果的新函式的技術。

示例

function

add(x,y)

//curring 處理

function

curringadd

(x)}

add(1,

2)// 3

curringadd(1

)curringadd(1

)(2)

就是處理一部分引數 返回乙個函式 用於處理剩下的引數

為什麼要用curring呢?

引數復用

function

check

(reg, txt)

check

(/\d+/g

,122

)check

(/[a-z]+/g

,'aaa'

)check

(/\d+/g

,'text'

)// 如果我們要不同的地方都要驗證同乙個正則規則,那麼第一引數就可以進行復用了

function

curringcheck

(reg)

}let isnum =

curringcheck

(/\d+/g

)let isstring =

curringcheck

(/[a-z]+/g

)isnum

(123

)isnum

(text)

isstring

('ret'

)

這樣就實現了引數復用(我們經常用到哪些 引數復用 的情況 什麼情況下考慮使用curring 達到引數復用呢?)

提前確認

const

addevent

=function

(elem, type, fn, cature)

else

if(window.attachevent)

}// 柯里化

const addevent =

(function()

;}else;}

})()

;

上面**和下面的柯里化以後的區別是 我們在使用addevent函式的時候第二種寫法 已經知道我們要用的是 addeventlistener還是attachevent,而第一種寫法要判斷用哪個,所以柯里化就提前確認

延遲執行

function.prototype.

bind

=function

(context)

}

參考詳解js函式柯里化

JS實現柯里化

不想看我胡扯的朋友直接進入完整 章節哈。我們將sum a b c 拆分,觀察結構得出結論 sum a b 返回乙個函式,如果想達到引數鏈式呼叫,sum a b c 也是乙個函式,不是我們想要的和,我們可以將該函式無引數執行一次 sum a b c 這樣設計可以做到單獨考慮無引數情況時返回和。求和的 ...

柯里化函式的實現

柯里化通常也稱部分求值,其含義是給函式分步傳遞引數,每次傳遞引數後部分應用引數,並返回乙個更具體的函式接受剩下的引數,這中間可巢狀多層這樣的接受部分引數函式,直至返回最後結果。如果要實現下面這個方法 add 2 1,3,4 2,3 3 4,6 7,98 133 上面這個函式當引數為空的時候執行了內部...

js函式柯里化

什麼是函式柯里化?在電腦科學中,柯里化 currying 是把接受多個引數的函式變換成接受乙個單一引數 最初函式的第乙個引數 的函式,並且返回接受餘下的引數且返回結果的新函式的技術。這個技術由 christopher strachey 以邏輯學家 haskell curry 命名的,儘管它是 mos...