zoukankan      html  css  js  c++  java
  • 科里化

    科里化:这是函数闭包的一种特殊形式,创建一个函数的生成器.它接受函数的名字和参数,并且返回一个新的局部函数,它只需要剩余的参数.

    举个例子:

    //科里化函数

    function
    curry(fn,scope){
      var scope = scope || window;
      var args = [];

      for(var i = 2,len = arguments.length;i<len;++i){
        args.push(arguments[i]);
      }

      return function(){
        var args2 = [];
        for(var i=0;i<arguments.length;i++){
          args2.push(arguments[i]);
        }
        
        var argsTotal = args.concat(args2);
        return fn.apply(scope,argsTotal);
      }
    }

    //下面我们来计算两家基金1个月的利息金额

    //rateA 代表 A基金的日利率
    //rateB 代表 B基金的日利率
    //days 代表 天数
    //capital 代表 本金

    function interest(rateA,rateB,days,capital){
      //我们将返回一个数组
      //位置[0]代表A基金N天的盈利
      //位置[1]代表B基金N天的盈利
      return [rateA*days*capital,rateB*days*capital];
    }

    //假设我们有5名顾客的资金需要计算
    //假设A的日利率为0.01,B为0.02

    //传统方式:
    interest(0.01,0.02,30,2000);
    interest(0.01,0.02,40,3000);
    interest(0.01,0.02,50,4000);
    interest(0.01,0.02,30,5000);
    interest(0.01,0.02,50,6000);

    //0.01,0.02一直在重复,削弱了应用的性能

    //使用科里化方式:
    var interestCurry = curry(interest,null,0.01,0.02);

    interestCurry(30,2000);
    interestCurry(40,3000);
    interestCurry(50,4000);
    interestCurry(30,5000);
    interestCurry(50,6000);

    //科里化方式给函数附加了一些参数,避免了大量的重复,curry也可以接受作用域作为参数,但本例没有特定的作用域因此使用window对象.

    //很多框架都提供了curry方法,例如Dojo,jQuery,Prototype.js等.



  • 相关阅读:
    C#Windows服务程序安装常见问题解决方法
    解决access 导出 excel 字段截断错误的问题
    MySQL创建方法错误:This function has none of DETERMINISTIC, NO SQL
    解决问题 “You don't have permission to access /index.html on this server.”
    无法枚举容器中的对象,访问被拒绝的解决方法
    php xml操作
    php 字符串截取函数
    PHP iconv 解决utf-8和gb2312编码转换问题
    IIS6,IIS7中查看w3wp进程
    Solaris设备管理
  • 原文地址:https://www.cnblogs.com/SmileCN/p/3153444.html
Copyright © 2011-2022 走看看