0%

Javascript Currying

当我们把一个多参数的函数,分解为若干个但参数的函数时,我们就在进行函数柯里化(Currying)。一个小例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
var add = function(){
var args = arguments,
ret = 0;
[].forEach.call(args, function(item){
var num = +item || 0;
ret += num;
});
console.log('result: '+ ret);
return ret;
};
Function.prototype.currying = function(){
var args = [].slice.call(arguments),
self = this;
return function(){
var combinedArgs = args.concat([].slice.call(arguments));
return self.apply(null, combinedArgs);
};
};
var add123 = add.currying(1, 2, 3),
add456 = add123.currying(4, 5, 6);
// 运行
add456(7, 8, 9);
add456(1);
add456(2, 3);

参考文章:尾调用优化Thunk 函数的含义和用法 PS:柯里化的对偶是反柯里化(Uncurrying),且听下回分解吧。

欢迎关注我的其它发布渠道