先說(shuō)個(gè)題外話(huà)瓶摆,很多人在學(xué)redux(react管理狀態(tài)流的一種思想)的時(shí)候,查了各種資料都不能真正懂redux是個(gè)什么東西,怎么實(shí)現(xiàn)的易桃,只能停留在僅僅懂用的地步。
redux是很難锌俱,但是我們也要換個(gè)角度想晤郑,是不是自身水平有限,才看不懂呢贸宏?
至少在我自己看來(lái)造寝,我還有很多思想,很多js的知識(shí)點(diǎn)還沒(méi)掌握吭练,等我的基礎(chǔ)足夠扎實(shí)诫龙,不斷積累與沉淀,才能真正理解建立在這些思想和知識(shí)上的技術(shù)吧鲫咽。
說(shuō)這些签赃,是自己的一些反思,也是因?yàn)閞edux中也小用到函數(shù)柯里化分尸。
直接上代碼:
好了進(jìn)入正題锦聊,說(shuō)一下函數(shù)柯里化。
關(guān)于Currying箩绍,英文好的同學(xué)可以看看維基上十分全面(相當(dāng)專(zhuān)業(yè))的解釋----維基Currying(然后我默默地點(diǎn)擊了翻譯)孔庭。
簡(jiǎn)單總結(jié)一下:Currying是一種產(chǎn)生一系列函數(shù)的方法,每個(gè)函數(shù)都只有一個(gè)參數(shù)材蛛。這個(gè)建設(shè)是通過(guò)在另外一個(gè)新的Curry函數(shù)中隱藏一個(gè)參數(shù)來(lái)實(shí)現(xiàn)的史飞,而這個(gè)函數(shù)的作用是返回剩余參數(shù)的函數(shù)尖昏。類(lèi)似一種分解的思想吧,把一個(gè)堆積的東西分解出來(lái)构资,逐個(gè)解決抽诉。
啥意思呢?
就是我現(xiàn)在定義一個(gè)函數(shù):const add = (a, b, c, d) => { console.log(a+b+c+d) }吐绵,有一個(gè)要求迹淌,如果想要執(zhí)行這個(gè)函數(shù),必須要把4個(gè)參數(shù)都傳遞進(jìn)去己单。這種思想在中間件里其實(shí)也可以運(yùn)用唉窃,把所有注冊(cè)的事件當(dāng)作參數(shù)就行。
下面我們實(shí)現(xiàn)一下curry函數(shù):
這里有個(gè)難理解的地方是function f2(){}()這種寫(xiě)法纹笼,舉個(gè)例子方便理解:
然后我們把上面es5的寫(xiě)法寫(xiě)成es6的寫(xiě)法:
繼續(xù)代碼縮減:
最后廷痘,有一道curry的題大家可以做做:curry 函數(shù)
大家端午節(jié)快樂(lè)~
打代碼別忘了身體健康哈蔓涧,一會(huì)健身走起~
持續(xù)發(fā)布自己對(duì)一些js知識(shí)點(diǎn)的理解,歡迎關(guān)注