阅读 504

一篇文章让你看懂JS函数柯理化

函数柯理化

函数柯理化基本概念是:柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术;
两年前阿里出了一个很有意思的面试题:

实现一个函数要求add(1)(2)实现数据的相加;

简单的很,然而这只是一个开始

那add(1)(2)(3)呢?难道我们return三个函数,那如果是无数个相加呢?

柯里化函数的运行过程其实是一个参数的收集过程
我们先声明一个变量来接受这个参数,当没有参数传入的时候表示已经收集完成了,就执行我们的add方法

这样所有的参数就传入了add中,我们来写一个add的方法来进行累加的操作

然后我们只要进行调用就好了;

这样算是实现了链式调用了,但是不支持这种的sum(1,2)(3)(4,5);

那我们改改代码,es6有…运算符,可以支持这个操作

然后进行调用就好了

每次都这样写的话,把简单的问题复杂化了,那我们能不能像promise一样把这个做成语法糖的形式来调用呢?

当然是可以的
首先我们要把add做成一个参数传入到我们的函数里面,然后采用闭包的形式声明一个all的数据队列,然后在返回我们需要的sum函数进行递归的操作
具体代码如下

调用下

这样代码就可以由自己定义并生成了,代码中注释了all=[];这段,这是如果每次执行不累加的话,应该放开的,也就是每次执行一次传入方法把all数组重置一次。

总结:

调用不同的方法来生成不同的函数,然后保存起来,供我们多次的复用。如果看懂了,麻烦给个赞哟,如果没看懂,麻烦告诉我那里不懂,我会及时更新补充的!

关注下面的标签,发现更多相似文章
评论