【js】編程的一個重要思想----函數柯里化Currying

先說個題外話,很多人在學redux(react管理狀態流的一種思想)的時候,查了各種資料都不能真正懂redux是個什么東西,怎么實現的,只能停留在僅僅懂用的地步。

redux是很難,但是我們也要換個角度想,是不是自身水平有限,才看不懂呢?

至少在我自己看來,我還有很多思想,很多js的知識點還沒掌握,等我的基礎足夠扎實,不斷積累與沉淀,才能真正理解建立在這些思想和知識上的技術吧。

說這些,是自己的一些反思,也是因為redux中也小用到函數柯里化。

直接上代碼:


applyMiddleware源碼

好了進入正題,說一下函數柯里化。

關于Currying,英文好的同學可以看看維基上十分全面(相當專業)的解釋----維基Currying(然后我默默地點擊了翻譯)。

簡單總結一下:Currying是一種產生一系列函數的方法,每個函數都只有一個參數。這個建設是通過在另外一個新的Curry函數中隱藏一個參數來實現的,而這個函數的作用是返回剩余參數的函數。類似一種分解的思想吧,把一個堆積的東西分解出來,逐個解決。

啥意思呢?

就是我現在定義一個函數:const add = (a, b, c, d) => { console.log(a+b+c+d) },有一個要求,如果想要執行這個函數,必須要把4個參數都傳遞進去。這種思想在中間件里其實也可以運用,把所有注冊的事件當作參數就行。


我們要實現curry函數

下面我們實現一下curry函數:


curry函數的實現

這里有個難理解的地方是function f2(){}()這種寫法,舉個例子方便理解:


這種寫法你懂嗎?


然后我們把上面es5的寫法寫成es6的寫法:


es6寫法是不是更簡潔了呢?

繼續代碼縮減:


我就服一下寫出這種代碼的人

最后,有一道curry的題大家可以做做:curry 函數

大家端午節快樂~

打代碼別忘了身體健康哈,一會健身走起~

持續發布自己對一些js知識點的理解,歡迎關注

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容