当我们把一个多参数的函数,分解为若干个但参数的函数时,我们就在进行函数柯里化(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),且听下回分解吧。