首页 > Web开发 > 详细

js函数柯里化(currying)的一些理解

时间:2019-10-12 12:01:02      阅读:74      评论:0      收藏:0      [点我收藏+]

一.定义

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

二.实列

var add= (function () {
    var args = [];
    return function () {
      //通过函数的arguments属
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 求值

 

js函数柯里化(currying)的一些理解

原文:https://www.cnblogs.com/myspecialzone/p/11660357.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!