什么是柯里化?
在计算机科学中,柯里化(Currying)是把接收多个参数的函数换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。这个技术由 Christopher Strachey 以逻辑学家 Haskell Curry 命名的,尽管它是 Moses Schnfinkel 和 Gottlob Frege 发明的。
简单的理解就是:原本一个函数是被写成可以接受多个参数的形式,现在将其改写成每次接受一个参数(按照之前传参的顺序)的函数形式,这里需要处理的是如何存储每次传参后处理得到的结果以及如何返回一个函数进而能使后一个传进来的参数能继续执行下去。
代码上示意:
1 | f(x,y,z) -> f(x)(y)(z) |
为什么对函数进行柯里化
- 固定易变因素(比如this)
- 可以实现对众多子功能的开关把控
如何对函数进行柯里化
关键点:
- 易变因素、参数的处理
- 如果传入的参数也是函数,就变成了高阶函数
- 函数的返回结果是 return 一个函数形成一个闭包
实现示例
- Count
实现一个简单的计数器功能,使用柯里化函数,不过每次传的参数为空的。
1 | var count = (function() { |
- 固定易变因素
柯里化特性决定了它的应用场景。提前把易变因素,传参固定下来,生成一个更明确的应用函数。最典型的代表应用,是 bind 函数用以固定 this 这个易变对象。Bind
1 | Function.prototype.bind = function(context) { |
1 | function hello(name) { |
参考链接