美文网首页
js中函数柯里化(currying)

js中函数柯里化(currying)

作者: Thstone | 来源:发表于2016-08-16 15:08 被阅读0次

函数柯里化就是创建已经设置单个参数或者多个参数的函数,函数变为接受一个参数,返回一个值,

1,实现

默认下为参数复用的情况

function curry(fn){
        var curry=function(fn){
              //这里是需要复用的参数
              var args=Array.prototype.slice.call(arguments,1);
              return function(){
                //这里是自身参数
                  var innerArgs=Array.prototype.slice.call(arguments);
                   //合并自身参数和复用的参数
                var finalArgs=args.concat(innerArgs);
                return fn.apply(null,finalArgs);
            }
        }
}

2,应用

1,参数复用

    var curry=function(fn){
        //这里是需要复用的参数
        var args=Array.prototype.slice.call(arguments,1);
        return function(){
               //这里是自身参数
               var innerArgs=Array.prototype.slice.call(arguments);
               //合并自身参数和复用的参数
            var finalArgs=args.concat(innerArgs);
            return fn.apply(null,finalArgs);
        }
    }
    var add=function(){
           var args=Array.prototype.slice.call(arguments);
           var sum=0;
           for(var i=0;i<args.length;i++){
              sum+=args[i];
           }
           return sum;
    }
    var curryAdd=curry(add,3,4,5);
    console.log(curryAdd(6,7))   //结果为25,也可以传入单个参数

2,延迟计算

创建已经设置单个参数或多个参数的函数的情况下,即在参数复用的情况,同时实现延迟计算

        var add=function(){
               var args=Array.prototype.slice.call(arguments);
               var sum=0;
               for(var i=0;i<args.length;i++){
                  sum+=args[i];
               }
               return sum;
        }
        var curryDelay=function(fn){
            //复用的参数
            var args=Array.prototype.slice.call(arguments,1);
            //定义一个保存复用参数和自身参数的数组
            var ary=args;
            return function(){
                //这里是自身参数              
                if(arguments.length==0){                    
                    return fn.apply(null,ary);
                   }else{                      
                        ary=ary.concat(Array.prototype.slice.call(arguments));
                        console.log(ary);
                }
            }
        }
         var curryDelayAdd=curryDelay(add,3,4,5);
         curryDelayAdd(6);                  //ary为[3,4,5,6]
         curryDelayAdd(7);                  //ary为[3,4,5,6,7]
         curryDelayAdd(8);                  //ary为[3,4,5,6,7,8]
         console.log(curryDelayAdd());      //结果33

相关文章

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

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

  • js柯里化

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

  • JS_函数柯里化

    JS_函数柯里化 与函数绑定密切相关的主体是函数柯里化(function currying),它用于创建已经设置好...

  • js中函数柯里化(currying)

    函数柯里化就是创建已经设置单个参数或者多个参数的函数,函数变为接受一个参数,返回一个值, 1,实现 默认下为参数复...

  • JS柯里化

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

  • 函数的柯里化和反柯里化

    一 柯里化(currying) 柯里化(currying)又称部分求值。一个currying的函数首先会接受一些参...

  • 函数柯里化与偏函数

    什么是函数柯里化(Currying) 维基百科: 在计算机科学中,柯里化(英語:Currying),又译为卡瑞化或...

  • 手写简单.bind()实现

    手写一个实现柯里化的.bind() 柯里化:《函数柯里化小结》柯里化:前端开发者进阶之函数柯里化Currying ...

  • 『JavaScript专题』之函数柯里化

    JavaScript专题之函数柯里化 定义 维基百科中对柯里化 (Currying) 的定义为: In mathe...

  • java8入门必备—函数式编程思维——函数式语言向语言和运行时让

    柯里化和函数的部分施用 柯里化(currying)和函数的部分施用(partial application)都是从...

网友评论

      本文标题:js中函数柯里化(currying)

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