通用實現
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...