【js】编程的一个重要思想----函数柯里化Currying

先说个题外话,很多人在学redux(react管理状态流的一种思想)的时候,查了各种资料都不能真正懂redux是个什么东西,怎么实现的,只能停留在仅仅懂用的地步。

redux是很难,但是我们也要换个角度想,是不是自身水平有限,才看不懂呢?

至少在我自己看来,我还有很多思想,很多js的知识点还没掌握,等我的基础足够扎实,不断积累与沉淀,才能真正理解建立在这些思想和知识上的技术吧。

说这些,是自己的一些反思,也是因为redux中也小用到函数柯里化。

直接上代码:


【js】编程的一个重要思想----函数柯里化Currying_第1张图片
applyMiddleware源码

好了进入正题,说一下函数柯里化。

关于Currying,英文好的同学可以看看维基上十分全面(相当专业)的解释----维基Currying(然后我默默地点击了翻译)。

简单总结一下:Currying是一种产生一系列函数的方法,每个函数都只有一个参数。这个建设是通过在另外一个新的Curry函数中隐藏一个参数来实现的,而这个函数的作用是返回剩余参数的函数。类似一种分解的思想吧,把一个堆积的东西分解出来,逐个解决。

啥意思呢?

就是我现在定义一个函数:const add = (a, b, c, d) => { console.log(a+b+c+d) },有一个要求,如果想要执行这个函数,必须要把4个参数都传递进去。这种思想在中间件里其实也可以运用,把所有注册的事件当作参数就行。


【js】编程的一个重要思想----函数柯里化Currying_第2张图片
我们要实现curry函数

下面我们实现一下curry函数:


【js】编程的一个重要思想----函数柯里化Currying_第3张图片
curry函数的实现

这里有个难理解的地方是function f2(){}()这种写法,举个例子方便理解:


【js】编程的一个重要思想----函数柯里化Currying_第4张图片
这种写法你懂吗?


然后我们把上面es5的写法写成es6的写法:


【js】编程的一个重要思想----函数柯里化Currying_第5张图片
es6写法是不是更简洁了呢?

继续代码缩减:


我就服一下写出这种代码的人

最后,有一道curry的题大家可以做做:curry 函数

大家端午节快乐~

打代码别忘了身体健康哈,一会健身走起~

持续发布自己对一些js知识点的理解,欢迎关注

你可能感兴趣的:(【js】编程的一个重要思想----函数柯里化Currying)