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

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

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》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值