什么是函数柯里化

柯里化通常也称部分求值,其含义是给函数分步传递参数,每次传递参数后部分应用参数,并返回一个更具体的函数接受剩下的参数,这中间可嵌套多层这样的接受部分参数函数,直至返回最后结果。
因此柯里化的过程是逐步传参,逐步缩小函数的适用范围,逐步求解的过程。
个人理解为在函数传执行时函数并不计算结果,而是返回一个新的函数,这个新的函数已经内置了之前的参数,在需要计算结果时再返回结果。

柯里化实现

通用的柯里化函数

  var curry = function (fn) {
       //利用闭包来保存参数
       var _args = [];

       return function () {
           //如果参数为0返回计算结果
           if (arguments.length === 0) {
               return fn.apply(this, _args);
           }
           
           //否则将参数添加到_args中并返回当前函数
           [].push.apply(_args, arguments);
           return arguments.callee;
       }
   };

柯里化一个求和函数

var add = curry(function () {
       return [].reduce.call(arguments, function (a, b) {
           return a + b;
       })
   });

 add(2, 4);
 add(4);
 add(2, 3, 45);  
 //此时函数并未执行加法运算,只是保存了添加的参数

 add();
 //这里执行了加法运算,返回计算结果60

没落的宅男贵族
112 声望2 粉丝