高阶函数。
在通常的语言中,函数的参数和返回值都只接受基本的数据类型,或是对象引用。
function foo(x){
return x;
}
高阶函数则是可以吧函数作为参数,或是将函数作为返回的函数。
function foo(x){
return function (){
return x
}
}
后续传递风格的程序编写将函数的业务重点从返回值转移到了回调函数中:
function foo(x, bar){
return bar(x);
}
以上面的foo方法传入bar的参数不同,则可以得到不同的结果。
一个经典的例子便是数组的sort()方法,他是一个货真价实的高阶函数,可以接受一个方法作为参数参与运算排序。
var arr = [40, 100, 1, 5, 25 ,10];
arr.sort(function(a, b){
return a - b;
});
//[100, 40, 25, 10, 5, 1]
高阶函数具有很强的灵活性,结合Node提供的最基本的额事件模块可以看到,事件的处理方式正是基于高阶函数的特性来完成的。
var emitter = new events.EventEmitter();
emitter.on('event_foo', function(){
//TODO
})
在自定义事件实例中,通过为相同事件注册不同的回调函数,可以很灵活地处理业务逻辑。
高阶函数在JavaScript中比比皆是,es5中提供的一些数组方法,map()、every()、some()、sort()、forEach() 、reduce()、filter()
十分典型。