JavaScript进阶设计模式系列——基础篇——高阶函数

定义:

是指满足下列条件之一的函数:

  1. 函数可作为参数被传递
  2. 函数可作为返回值输出

详情参见维基百科定义:

应用场景

作为参数传递

回调函数

其实,从本质上来讲:回调函数和委托是一回事儿。当一个函数不适合执行一些请求的时候,我们把这些请求封装成一个函数,并把它作为参数传递给另外一个函数,委托其他的函数来执行。

在Ajax的使用过程中,回调函数使用非常频繁。我们想要在Ajax请求完成后,执行一些操作,但是有不知道返回的确切时间,最常见的方案就是把callback函数当做参数传入发起Ajax请求的方法中,在请求完成之后,执行callback函数。

作为返回值输出

让函数继续返回一个可执行的函数,这样运算过程就被延续了。

实例演示:


var getSingle = function (fn) {
    var ret ;//由于使用了闭包,第二次访问的时候,ret保留了上一次的值
    return function () {
        return ret || (ret = fn.apply(this,arguments));
    };
};

var getScript = getSingle(function () {
    return {
        name : 'script'
    }
});


var script1 = getScript();
var script2 = getScript();

console.log(script1 === script2); //输出true

实现AOP

/**
 * Created by bill on 7/4/2017.
 */
Function.prototype.before = function (beforefn) {
    var _self = this; //保留对原函数的引用
    return function () {
        beforefn.apply(this,arguments);//改变this 的指向,调用before函数
        _self.apply(this,arguments); //调用原函数
    }
}

Function.prototype.after = function (afterfn) {
    var _self = this;
    return function () {
        var ret = _self.apply(this,arguments);
        afterfn.apply(this,arguments);
        return ret;
    }
}

var func = function () {
    console.log('2')
}

func = func.before(function () {
    console.log('1')
}).after(function(){
    console.log('3')
});

func();
上面的这段程序结果输出为:1 2 3 

其他高阶函数的应用场景

函数currying(柯里化)

定义:维基百科

在计算机科学中,柯里化(英语:Currying),又译为卡瑞化或加里化,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术

它还可以称之为部分求值。

函数UNcurrying(反柯里化)

函数节流

分时函数

惰性加载函数

后话:其他应用,大家有兴趣的自行研究下吧,就不一一和大家介绍了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值