函数柯理化
函数柯理化基本概念是:柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术;
两年前阿里出了一个很有意思的面试题:
实现一个函数要求add(1)(2)实现数据的相加;
简单的很,然而这只是一个开始
那add(1)(2)(3)呢?难道我们return三个函数,那如果是无数个相加呢?
柯里化函数的运行过程其实是一个参数的收集过程
我们先声明一个变量来接受这个参数,当没有参数传入的时候表示已经收集完成了,就执行我们的add方法
然后我们只要进行调用就好了;
这样算是实现了链式调用了,但是不支持这种的sum(1,2)(3)(4,5);
那我们改改代码,es6有…运算符,可以支持这个操作
每次都这样写的话,把简单的问题复杂化了,那我们能不能像promise一样把这个做成语法糖的形式来调用呢?
当然是可以的
首先我们要把add做成一个参数传入到我们的函数里面,然后采用闭包的形式声明一个all的数据队列,然后在返回我们需要的sum函数进行递归的操作
具体代码如下
总结:
调用不同的方法来生成不同的函数,然后保存起来,供我们多次的复用。如果看懂了,麻烦给个赞哟,如果没看懂,麻烦告诉我那里不懂,我会及时更新补充的!