# 函数柯里化(Currying)

Curring 又称部分求值。是指把接收多个参数的函数变换成接收一个单一参数的函数,并且返回接收下的参数并且返回结果的新函数的技术。 一个 Curring 的函数首先会接受一些参数,接受了这些参数之后,该函数并不会立即求值,而是继续返回另一个函数,刚才传入的参数在函数形成的闭包中被保存起来。 待到函数被真正需要求值的时候,之前传入的所有参数都会被一次性用于求值。

# 普通函数

var monthlyCost = 0;
var cost = function (money) {
  monthlyCost += money;
};

cost(100);
cost(200);
cost(300);

alert(monthlyCost);

# 柯里化

// 自执行函数返回一个新的函数
var costK = (function () {
  var args = [];
  return function () {
    if (arguments.length == 0) {
      var money = 0;
      for (var i = 0; i < args.length; i++) {
        money += args[i];
      }
      return money;
    } else {
      [].push.apply(args, arguments);
    }
  }
})();

costK(100);
costK(200, 300);
costK(500);

// 当参数为空时才真正的进行求值计算
console.log(costK());