函数柯里化

扫码查看
// var cost = (function () {
//   var args = [];
//   return function () {
//     if (arguments.length === 0) {
//       var money = 0;
//       for (var i = 0, l = args.length; i < l; i++) {
//         money += args[i]
//       }
//       return money;
//     }
//     else {
//       Array.prototype.push.apply(args, arguments)
//     }
//   }
// })()
// cost(200)
//这个只要用于保存参数,或者判断是否需要进行一次性求值
var curring = function (fn) {
  var arg = [];
  return function () {
    if (arguments.length === 0) {
      return arg
    }
    else {
      [].push.apply(arg, arguments);
      return arguments.callee
    }
  }
};
var cost = (function () {
  var money = 0;
  return function () {
    for (var i = 0, l = arguments.length; i < l; i++) {
      money += arguments[i]
    }
    return money
  }
}
)();
var cost = curring(cost);
cost(300);

  

Function.prototype.uncurrying = function () {
  console.log(this)//谁调用指向谁
  var self = this;
  return function () {
    var obj = Array.prototype.shift.call(arguments);//对象
    return self.apply(obj, arguments)//数组
  }
};
var push = Array.prototype.push.uncurrying();

(function () {
  push(arguments, 4);
  console.log(arguments,'arguments');
})(1, 2, 3)

  

01-02 23:48
查看更多