定义:
是指满足下列条件之一的函数:
- 函数可作为参数被传递
- 函数可作为返回值输出
应用场景
作为参数传递
回调函数
其实,从本质上来讲:回调函数和委托是一回事儿。当一个函数不适合执行一些请求的时候,我们把这些请求封装成一个函数,并把它作为参数传递给另外一个函数,委托其他的函数来执行。
在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),又译为卡瑞化或加里化,是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术
它还可以称之为部分求值。