美文网首页
函数柯里化

函数柯里化

作者: 卡卡卡卡颂 | 来源:发表于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