函数式编程基础---高阶函数和偏函数

1、高阶函数编程

  所谓高阶函数是指可一把函数做为参数,或者是能够将函数做为返回值的函数(咱们见得闭包函数就是高阶函数)。数组

function foo(x){
   return function(){
        return x;
   }  
}

  对于程序的编写,高阶函数比普通函数要灵活的多,除了一般意义的函数调用返回外,还造成了一种后续传递风格的结果接收方式,而非单一的返回值形式,后续传递风格的程序编写将函数的业务重点从返回值转移到了回调函数中:闭包

function(x,bar){
   return bar(x);      
}

  以上的代码为例,对于相同的foo()函数,传入的bar的参数不一样,则能够获得不一样的结果。结合Node提供的最基本的事件模块能够看到,事件的处理方式就是基于高阶函数的特性来完成的。app

  高阶函数在JS中的应用比比皆是,其中ECMAScript5中提供的一些数组方法就是典型的高阶函数,好比:forEach()、map()、reduce()、reduceRight()、filter()、every()、some()等。异步

 

2、偏函数异步编程

  偏函数用法是指建立一个调用另外一个部分——参数或变量已经预置的的函数——的函数的用法。(好拗口,我也不懂),先看看例子。函数

普通方法:
var
toString=object.prototype.toString; var isString=function(obj){ return toString.call(obj)=='[object String]'; }; var isFunction=function(obj){ return toString.call(obj)=='[object Function]'; };
.......... 偏函数方法:
var isType=function(type){ return function(obj){ return tostring.call(obj)=='[object ' + type+ ' ]'; } }

  上面的例子中,用偏函数方法去除了冗余代码,解决了重复定义的问题。这种经过指定部分参数来产生一个新制定的函数的形式就是偏函数。this

  偏函数应用在异步编程中也十分常见,著名的类库Underscore提供的after()方法既是偏函数应用,其定义以下:spa

_.after=function(times,func){
   if(times<=0) return func();
   return function(){
      if(--times<1){return func.apply(this,arguments)};
   }  
}

   这个函数能够根据传入的times参数和具体的方法,生成一个须要调用屡次才能真正执行实际函数的函数。prototype

相关文章
相关标签/搜索