函数柯里化定义
函数柯里化(function currying)又称部分求值。一个currying的函数首先会接受一些参数,接受了这些参数后,
该函数并不会立即求值,而是继续返回另外一个函数,刚才传入的参数在函数形成的闭包里被保存起来。待到函数真正需要求值的时候,之前传入的参数都会被一次性用于求值。
把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数。
顾名思义,柯里化其实本身是固定一个可以预期的参数,并返回一个特定的函数,处理批特定的需求。这增加了函数的适用性,但同时也降低了函数的适用范围。
1 | function add(x,y){ |
函数柯里化实践
1 | // 通过以上简单介绍我们大概了解了,函数柯里化基本是在做这么一件事情:只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数。用公式表示就是我们要做的事情其实是 |
通用的函数柯里化版本
1 | // 这里需要传入长度 |
1 | // 这里是无参数时开始计算所有的cost |
1 | // 和toString().valueOf()时计算和是一样的道理 |
为了减少函数传参,同时将一些固定参数私有化
1 | function curry(fn, args) { |
1 | // es6实现 |
函数柯里化的优点
延迟计算 可以传递需要的参数,等到何时想要结果,再一并计算。
参数复用 有些参数相同,只需要传递一遍即可,不需要每次都传,太繁琐。