zoukankan      html  css  js  c++  java
  • js函数柯里化(currying)的一些理解

    一.定义

       对传入函数的参数并不会立马进行求值,而是先将它们存储(利用闭包)起来,等到需要真正求值的时候一次性对之前传入的所有参数进行求值

    二.实列

    var add= (function () {
        var args = [];
        return function () {
          //通过函数的arguments属性判断该函数是否接受参数,如果没有参数,则计算args数组中的和
          if (arguments.length === 0) {
            var result = 0;
            for (var i = 0, l = args.length; i < l; i++) {
              result += args[i];
            }
            return result ;
            //如果有参数,则只能是将数据传到args数组中
          } else {
            [].push.apply(args, arguments);
          }
        }
      })();
      add(1) //不会求值,将其push到arguments中
      add(2)//不会求值,将其push到arguments中
      add()// 3  没有传入参数,进行求值
    三.通用的柯里化函数
    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; //指向当前调用函数的指针,此处指 
                                                     currying
          }
        }
      };

    四.应用

     var add= (function () {
        var result = 0;
        return function () {  //此处产生闭包,将值存储起来,不会销毁
          for (var i = 0, l = arguments.length; i < l; i++) {
            result += arguments[i];
          }
          return result ;
        }
      })();
    var myAdd = currying(add); // 调用通用的柯里化函数转化成 currying 函 
                                                  数
    myAdd (1) //不会求值
    myAdd (2) //不会求值
    myAdd()//3 求值
  • 相关阅读:
    linux 下面 opcache 拓展
    php中函数前加&符号的作用分解
    apache 设置404页面
    nginx 环境搭建使用之入门
    curl获取http请求的状态码
    js打开新的窗体不被浏览器阻止
    YII 框架使用之——创建应用
    Yii 框架创建自己的 web 应用
    PHP中CURL方法curl_setopt()函数的一些参数
    Linux的学习--使用PuTTY
  • 原文地址:https://www.cnblogs.com/myspecialzone/p/11660357.html
Copyright © 2011-2022 走看看