函数柯里化

2017-04-02  本文已影响0人  卡卡卡卡颂

定义

currying,又称部分求值。一个currying的函数首先会接受一些参数,接受了这些参数后,
该函数并不会立即求值,而是继续返回另一个函数,刚才传入的参数在函数形成的闭包中被保存起来。
待到函数真正需要求值时,之前传入的所有参数都会被一次性用于求值。

一个柯里化思想展示

var cost=(function() {
  var args=[];
  return function() {
      if (arguments.length===0) {
          var money=0;
          for (var i=0,l=args.length;i<l;i++) {
              money+=args[i];
          }
          console.log(money);
          return money;
      } else {
          [].push.apply(args,arguments);
      }
  }
})()

cost(100);
cost(200);
cost(300);

cost();   //600

一个通用的currrying函数

var currying=function(fn) {
  var args=[];
  return function() {
    if (arguments.length===0) {
        return fn.apply(this,args);
    } else {
      [].push.apply(args,arguments);
      return arguments.callee;
    }
  }
}

var cost=(function() {
  var money=0;
  return function() {
    for (var i=0;i<arguments.length;i++) {
        money+=arguments[i];  
    }
    return money;
  }
})()

var cost=currying(cost); //转化为currying函数
cost(100);
cost(100);
cost(200);
cost();    //400
上一篇 下一篇

猜你喜欢

热点阅读