js--反柯里化

一个利用apply和call实现的有趣东西,看了好久才看明白。

帖小段代码出来,理解先

var push = Array.prototype.push.uncurring();
 push(obj,'first');
  
Function.prototype.uncurring = function(){
     var __this = this;
     return function(){
         Function.prototype.call.apply(__this,arguments); 
     }
}

小小的应用:

  2 var monthly_cost = 0;
  3 var monthly_cost_fn = curry(function(){
  4     for(var i=0,c;c=arguments[i++];){
  5         monthly_cost+=c;
  6     }
  7     return monthly_cost;
  8 });
  9 monthly_cost_fn(100);
 10 monthly_cost_fn(200);
 11 monthly_cost_fn(300);
 12 monthly_cost_fn(400);
 13 monthly_cost_fn();
 14 
 15 var curry = function(fn){
 16     var __args = [];
 17     return function(){
 18         if(arguments.length === 0){
 19             return fn.apply(this,__args);
 20         }
 21         [].push.apply(__args,arguments);
 22         return arguments.callee;
 23     }
 24 }
 25 


http://www.alloyteam.com/2012/12/4304/

你可能感兴趣的:(js,反柯里化)