面向对象编程和函数式编程是两种非常不同的编程范式,它们有自己的规则和优缺点。
但是,JavaScript 并没有一直遵循一个规则,而是正好处于这两个规则的中间,它提供了普通OOP语言的一些方面,比如类、对象、继承等等。但与此同时,它还为你提供了函数编程的一些概念,比如高阶函数以及组合它们的能力。
函数柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。我们来看个例子:
现在,如果你要做的就是将10
添加到一系列值中,则可以调用add10
而不是每次都使用相同的第二个参数调用adder
。 这个事例看起来比较蠢,但它是体现了 柯里化
的理想。
你可以将柯里化视为函数式编程的继承,然后按照这种思路再回到logger
的示例,可以得到以下内容:
log
的函数需要三个参数,而我们将其引入仅需要一个参数的专用版本中,因为其他两个参数已由我们选择。