函数式编程--偏函数用法

偏函数用法是指创建一个调用另外一个部分--参数或变量已经预置的函数--的函数的用法,这句话相对较为拗口,下面我们以实例来说明:

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]';
};


在JS中进行类型判断时,我们通常会进行类似上述代码的方法定义。这段代码固然不复杂,只有两个函数的定义,但是里面存在的问题是我们需要重复去定义一些相似的函数,如果有更多的isXXX(), 就会出现更多的冗余代码。为了解决重复定义的问题,我们引入一个新函数,这个新函数就可以如工厂一样批量创建一些类似的函数。在下面的代码中,我们通过isType()函数预先指定type的值,然后返回一个新的函数:

var isType = function ( type) {
return function ( obj) {
return toString. call( obj) == '[object ' + type + ']';
};
};
var isString = isType( 'String');
var isFunction = isType( 'Function');


可以看出,引入isType()函数后,创建isString()、isFunction()函数就变得简单多了。这种通过指定部分参数来产生一个新的定制函数的形式就是偏函数。

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

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


这个函数可以根据传入的times参数和具体方法,生成一个需要调用多次才真正执行实际函数的函数。


参考书籍:《深入浅出node.js》

你可能感兴趣的:(node)