JavaScript学习笔记(十九) 柯里化(Curry)
柯里(Curry)在接下来,我们会讨论的主题是柯里化(currying)和部分函数应用(partial function application),在我们深入这个主题之前,让我们首先看看什么是部分函数用法。函数应用(Function Application)在一些纯函数编程语言中,一个函数不被描述为调用(called or invoked),而是应用(applied)。在JavaScript中,我们有相同的情况——我们能应用(apply)一个函数通过Function.prototype.apply()方法,因为函数在JavaScript中实际上就是一个对象并且它们有自己的方法。这里有个函数用法的例子:
// a normal functionfunction add(a, b, c, d, e) { return a + b + c + d + e;}// works with any number of argumentsschonfinkelize(add, 1, 2, 3)(5, 5); // 16// two-step curryingvar addOne = schonfinkelize(add, 1);addOne(10, 10, 10, 10); // 41var addSix = schonfinkelize(addOne, 2, 3);addSix(5, 5); // 16什么时候使用柯里化(When to Use Currying)当你发现你调用同一个的函数,而传递的参数大部分都是一样的时候,那么这个参数就是一个很好的可以柯里化的候选函数。你可以动态创建一个新函数,部分应用一组参数到你的函数。接着新函数会存储重复的参数(那么你就不用每次都传递),并且会用它们去填充原始函数需要的参数列表。