柯里化
什么是柯里化?
简单来说,就是把多参数传入的函数拆成单参数(或部分)函数,内部再返回调用下一个单参数(或部分)函数,依次处理剩余的参数
(实则就是利用了闭包的特性)
目的:缩小适用范围,创建一个针对性更强的函数
用途:简化代码结构,提高系统的可维护性,强制了功能的单一性,自然就做到功能内聚,降低耦合
特点:
1. 降低代码的重复,提高代码的适应性
2. 提高了代码的合理性,更重的它突出一种思想---降低适用范围,提高适用性。
3. 对于一个已有函数,对其约定好其中的某些参数输入,然后生成一个更有好的、更符合业务逻辑的函数。
4. 提高针对性
5. 延迟执行(只有在最后一次才执行)
6. 固定易变因素
应用:ajax场景(ajax('method')()())
在bind方法中也应用到了柯里化:
![](https://i-blog.csdnimg.cn/blog_migrate/4e9e397bf1a06bc0c2edb33042e298ca.jpeg)
柯里化函数形式的实现
我觉得柯里化函数的类型也可以分为多种形式
1. 只执行一次(传入对应要执行的函数)
![](https://i-blog.csdnimg.cn/blog_migrate/1aeed4ff80445df5eaff777a11df05b1.jpeg)
2. 根据要执行函数的形参个数判断执行的次数(执行次数小于等于执行函数的形参个数)
![](https://i-blog.csdnimg.cn/blog_migrate/ba4aa3cb2640f3df32170f878367d1c6.jpeg)
3. 实现无限执行的累加操作(利用reduce和隐式转换的特性)
![](https://i-blog.csdnimg.cn/blog_migrate/0015199c4d167c9a630c63b3b177e16b.jpeg)
反柯里化
与柯里化相反的是反柯里化,其目的是为了扩大适用范围,创建一个应用范围更广的函数。使本来只有特定对象才适用的方法,扩展到更多的对象
实现可以让一个对象去借用一个原本不属于他的方法
实现形式:
![](https://i-blog.csdnimg.cn/blog_migrate/598573e2103924dba57ba379610ddd95.jpeg)
场景:
判断变量类型
![](https://i-blog.csdnimg.cn/blog_migrate/4bba6b964081ce290bd45e3d6e38a8fe.jpeg)