JavaScript函数式编程-函数组合应用

定义:

**函数组合:**由若干个纯函数、偏函数、柯里化函数组合成一个新的函数,同时,形成数据传递。

用途:

挑选了一系列所需要的函数,把他们组合在一起,可以实现公共合作的效果

最基本的函数组合:

function compose (fn,gn){  //fn gn 是两个函数
            return function (xn){
                return fn( gn(xn) );   //自右向左依次执行,称为左倾,使得x自右向左传递
            }
        }

此时的compose函数不具有普遍意义,我们稍作修改:

function compose(){
              
                var args = Array.prototype.slice.call(arguments);  // 把这个变成数组操作
                var len = args.length - 1; 
                return function (x){
                    // args[len](x)
                    var result = args[len](x);
                        while(len--){
                            result = args[len](result);
                        }
                    return result;
                }
            }

然后reduce优化代码:

function compose1(){
             
                var args = Array.prototype.slice.call(arguments);
                var len = args.length - 1; 
                return function (x){
                    return args.reduceRight(function (res,cb) { 
                       return cb(res);
                    },x);
                }
            }

ES6.0写法:

const compose2 = (...args) => x => args.reduceRight((res,cb) => cb(res) , x);

自左向右同理处理,通常称为“通道”,写法把reduceRight缓存reduce就行

function compose3(){
                var args = Array.prototype.slice.call(arguments);
                var len = args.length - 1; 
                return function (x){
                    return args.reduce(function (res,cb) { 
                       return cb(res);
                    },x);
                }
            }

例子(简单):实现字符串翻转后用-分割

var newCompose = compose3(toUpperCase,split,reverse);
var ans = newCompose('time');

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值