0%

Javascript Currying

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

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),且听下回分解吧。