zoukankan      html  css  js  c++  java
  • 柯里化函数和反柯里化

    柯里化函数

    什么是柯里化函数?

    • 使用闭包,函数内部对传进去的数据进行存储,等到满足条件后,通过回调函数对存储的数据进行统一处理

    柯里化函数的目的

    • 可以不间断的多次传入数据,函数不执行,等到满足一定条件后,统一执行

    柯里化函数的展示

    function curry(fn){
        var arr=[];     //私有变量       
        return function(){
            if(arguments.length>0){
                arr=arr.concat(Array.from(arguments));   //数据的存储
                return arguments.callee;  //返回函数自身    实现连缀写法的效果
            }else{
               return  fn.apply(null,arr);   //通过apply来传参,回调函数中Array.from() 才能对数据进行操作,直接传参,回调函数中Array.from()后变成二维数组
            }
           
        }
    }
    
    function fns(){
        return Array.from(arguments).reduce((value,item)=>value+=item);
    }
    
    var sum=curry(fns);    //闭包    返回的函数赋值给全局变量
    var s=sum(1)(2,3)(4,5,6)()
    console.log(s);
    

    柯里化的原型写法

    Function.prototype.currying=function(){
        var arr=[];
        var self=this;       //this指向的是调用这个方法的函数(相当于是实例化对象)
        return function(){
            if(arguments.length>0){
                arr=arr.concat(Array.from(arguments));
                 return arguments.callee;
            }
            return self.apply(null,arr);
        }
    }
    
    function getSum(){
        return Array.from(arguments).reduce((value,item)=>value+=item);
    }
    
    var f=getSum.currying();
    f(1);
    f(2,3,4);
    console.log(f());
    

    反柯里化

    Function.prototype.unCurrying=function(){
        var self=this;     //这里的this指向的是调用这个方法的数组方法push
        return function(){     //这是下面push的函数
            return (Function.prototype.call).apply(self,arguments);       //Function.prototype.call(Array.prototype.push,[1,2,3,4],-2)
        }
    }
    
    var push=Array.prototype.push.unCurrying();   
    
    function getSum(){
        push(arguments,-2);   //这里的arguments是  1,2,3,4   这里的push是个函数   参数的组合
    }
    
    getSum(1,2,3,4);
    
  • 相关阅读:
    css表格单元格间距设置
    JavaScript(js)设置输入焦点(focus)
    让div居中的方法
    Window.open()的使用
    getElementsByTagName的用法
    offsetTop获取top值
    js中indexof的使用
    jquery解析json数据
    iframe的使用
    WCF学习笔记Ⅲ
  • 原文地址:https://www.cnblogs.com/94-Lucky/p/13498406.html
Copyright © 2011-2022 走看看