最近碰到这个概念,就来做个笔记,啥都不说了上定义。

柯里化通常也称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果。

talk is cheap,show me the code
如果你有js基础,看看下面的代码就知道柯里化是咋回事了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var currying = function () {
var _args = [];
return function () {
if (arguments.length === 0) {
return _args.reduce(function (a, b) {
return a + b;
});
}
[].push.apply(_args, [].slice.call(arguments));
return arguments.callee;//返回当前执行函数
}
};
var sum = currying();
console.log(sum); // Function
// 调用形式灵活,一次调用可输入一个或者多个参数,并支持链式调用
sum(1,2)(3);
sum(4);
console.log(sum()); // 10

更通用的柯里化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var currying = function (fn) {
var _args = [];
return function () {
if (arguments.length === 0) {
return fn.apply(this, _args);
}
[].push.apply(_args, [].slice.call(arguments));
return arguments.callee;//返回当前执行函数
}
};
var sum = currying(multi);
console.log(sum); // Function
sum(1,2)(3);
sum(4);
console.log(sum()); // 10

var multi=function () {
var total = 0;
for (var i = 0, c; c = arguments[i++];) {
total += c;
}
return total;
};

简单来说因此柯里化的过程是逐步传参,逐步缩小函数的适用范围,逐步求解的过程。满足条件的时候它每次都会返回一个新的函数,新的函数又可以接受新的参数,直到延迟到最后一次不满足条件进行求值计算。
柯里化这个概念其实就是函数式编程思想, 用已有的函数组合出新的函数, 而柯里化每消费一个参数, 都会返回一个新的部分配置的函数, 这为函数组合提供了更灵活的手段, 并且使得接口更为流畅

欢迎交流转载请注明出处