高階函數(shù)。
在通常的語言中,函數(shù)的參數(shù)和返回值都只接受基本的數(shù)據(jù)類型,或是對象引用。
function foo(x){
return x;
}
高階函數(shù)則是可以吧函數(shù)作為參數(shù),或是將函數(shù)作為返回的函數(shù)。
function foo(x){
return function (){
return x
}
}
后續(xù)傳遞風格的程序編寫將函數(shù)的業(yè)務重點從返回值轉移到了回調(diào)函數(shù)中:
function foo(x, bar){
return bar(x);
}
以上面的foo方法傳入bar的參數(shù)不同,則可以得到不同的結果。
一個經(jīng)典的例子便是數(shù)組的sort()方法,他是一個貨真價實的高階函數(shù),可以接受一個方法作為參數(shù)參與運算排序。
var arr = [40, 100, 1, 5, 25 ,10];
arr.sort(function(a, b){
return a - b;
});
//[100, 40, 25, 10, 5, 1]
高階函數(shù)具有很強的靈活性,結合Node提供的最基本的額事件模塊可以看到,事件的處理方式正是基于高階函數(shù)的特性來完成的。
var emitter = new events.EventEmitter();
emitter.on('event_foo', function(){
//TODO
})
在自定義事件實例中,通過為相同事件注冊不同的回調(diào)函數(shù),可以很靈活地處理業(yè)務邏輯。
高階函數(shù)在JavaScript中比比皆是,es5中提供的一些數(shù)組方法,map()、every()、some()、sort()、forEach() 、reduce()、filter()十分典型。