美文网首页
js柯里化

js柯里化

作者: 广州芦苇科技web前端 | 来源:发表于2018-12-14 23:24 被阅读0次

标签: js柯里化


js柯里化

  • 柯里化是什么
    • 在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。
    • 柯里化是指将使用多个参数的函数转换成一系列使用一个参数的函数的技术。
    • 函数柯里化(function currying)又称部分求值。一个currying的函数首先会接受一些参数,接受了这些参数后,该函数并不会立即求值,而是继续返回另外一个函数,刚才传入的参数在函数形成的闭包里被保存起来。待到函数真正需要求值的时候,之前传入的参数都会被一次性用于求值。
    • js中的柯里化
      • 实列分析,计算每月开销的函数。在每天结束之前,我们都要记录今天花了多少钱
          var monthlyCost = 0;
        
          var cost = function(money){
              monthlyCost += money;
          };
        
          cost(100);//第一天开销
          cost(200);//第二天开销
          cost(300);//第三天开销
          //cost(700);//第三十天开销
        
          alert(monthlyCost);//输出:600
        
        但我们不太关心每天花掉多少,只想知道月底总共花掉了多少,也就是说,只需要在月底计算一次;
        • 柯里化不完整实现:
             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];
                     }
                     return money;
                 }else{
                     [].push.apply(args, arguments);
                 }
             }
             }());
             cost(100);//未真正求值
             cost(200);//未真正求值
             cost(300);//未真正求值
             console.log(cost());//求值并输出:600
          
        • 柯里化:
              var currying = function(fn){
                  var args = [];
                      return function inner(){
                          if(arguments.length === 0){
                              return fn.apply(this, args);
                          }else{
                              [].push.apply(args, arguments);
                              return inner;
                          }
                      }
              };
              var cost = (function(){
                  var money = 0;
                  return function(){
                      for(var i = 0, l = arguments.length; i < l; i++){
                          money += arguments[i];
                      }
                      return money;
                  }
              }());
              var cost = currying(cost);//转化为currying函数
              cost(100);//未真正求值
              cost(200);//未真正求值
              cost(300);//未真正求值
              console.log(cost());
          
          

往期精彩回顾


广州芦苇科技web前端

相关文章

  • js柯里化

    标签: js柯里化 js柯里化 柯里化是什么在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成...

  • [译]JavaScript中的函数柯里化

    原文 Currying in JS 函数柯里化 函数柯里化以Haskell Brooks Curry命名,柯里化是...

  • js柯里化

    在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函...

  • Js柯里化

    柯里化:函数接受一些参数,但不立即求值;返回一个匿名函数将参数保存下来;需要求值时将保存的全部参数一起用掉。(保存...

  • JS柯里化

    柯里化,即Currying,可以是函数变得更加灵活。我们可以一次性传入多个参数调用它;也可以只传入一部分参数来调用...

  • JS柯里化

    柯里化简介 js柯里化(currying)又译为卡瑞化或加里化,是把接受多个参数的函数,变为可接受多次调用的函数,...

  • JS柯里化

    前言 柯里化(Currying),又称部分求值(Partial Evaluation),是把接受多个参数的函数变换...

  • js柯里化

    柯里化函数的实现hyCurrying

  • JS函数式编程之柯里化

    JS函数式编程之柯里化 为什么要了解柯里化 柯里化是函数式编程必须要使用的. 这里我们就先介绍下什么是柯里化, 然...

  • 前端 js 柯里化和反柯里化

    函数柯里化currying的概念最早由俄国数学家Moses Schönfinkel发明,而后由著名的数理逻辑学家H...

网友评论

      本文标题:js柯里化

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