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 求值
  • 相关阅读:
    iOS面试题总结整理(附答案)
    iOS App上传项目遇到的问题
    Could not find Developer Disk Image
    xcode下载方式
    iOS App上架流程(2016详细版)
    Xcode中的iOS模拟器(iOS Simulator)的介绍和使用心得
    iOS开发之17个常用代码整理
    iOS求职之OC面试题
    Android xmpp 连接基本方法
    Ubuntu安装过程
  • 原文地址:https://www.cnblogs.com/myspecialzone/p/11660357.html
Copyright © 2011-2022 走看看