美文网首页
函数柯里化

函数柯里化

作者: 卡卡卡卡颂 | 来源:发表于2017-04-02 20:45 被阅读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

相关文章

网友评论

      本文标题:函数柯里化

      本文链接:https://www.haomeiwen.com/subject/nsagottx.html