函数柯理化又叫做函数的部分求值

柯里化是指这样一个函数,他接收函数 A 作为参数,运行后能够返回一个新的函数。并且这个新的函数能够处理函数A的剩余参数。

我们通过下面的例子配合来解释,先有一个函数 A

function A(a, b, c) {
   return a + b + c;
}

假如我们已经有一个封装好的柯理化函数 currying 他接收 A 作为参数,能够将 A 转化成柯理化函数,返回的结果就是这个被转化后的函数

var _A = currying(A);

那么 _A 作为柯理化函数,他能够处理A剩下的剩余参数,因此要求下面的运行结果都是等价的:

_A(1, 2, 3);
_A(1, 2)(3);
_A(1)(2, 3);
_A(1)(2)(3);
A(1, 2, 3);

函数 Acurrying 转化后得到柯理化函数 _A_A 能处理A的所有剩余参数,因此柯理化也被成为部分求值

在简单的场景下,我们凭眼里来封装得到柯理化函数可能是下面这样的

function myA(a) {
  return function(b) {
		return function(c) {
			return a + b + c;
    }
  }
}

那么下面的运算方式是等价的

A(1, 2, 3);
myA(1)(2)(3);

但是按照要求,要求 myA(1, 2)(3) 也要与其他的等价,单并不是,所以,靠眼里封装的柯理化函数自由度偏低,而且有些要求达不到

因此我们需要知道如何去封装一个柯理化的通用式