維基百科這樣描述:
高階函數(shù)是至少滿足下列一個條件的函數(shù):
- 接受一個或多個函數(shù)作為輸入
- 輸出一個函數(shù)
簡言之,一個函數(shù)可以將其他函數(shù)作為參數(shù)或者返回值是函數(shù),這個函數(shù)就是高階函數(shù)。
JavaScript中的高階函數(shù)
-
map
- 定義:通過指定的函數(shù)去處理數(shù)組中的每個元素,并返回處理后的新數(shù)組。
- 語法:
array.map(function(currentValue,index,arr), thisValue) - 實例:
function multi(x) { return x * 10; } var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9]; var results = arr.map(multi); // [1, 4, 9, 16, 25, 36, 49, 64, 81] console.log(results); //結(jié)果為:10,20,30,40,50,60,70,80,90function multi(element, index, arr) { console.log(element, index, arr) return element * 10; } var arr = [10, 20, 30, 40, 50, 60, 70, 80, 90]; var results = arr.map(multi); // [1, 4, 9, 16, 25, 36, 49, 64, 81] console.log(results);

-
reduce
定義:接收一個函數(shù)作為累加器,數(shù)組中的每個值(從左到右)開始縮減,最終計算為一個值。
語法:
array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
注意:末尾的參數(shù)initialValue可以指定total初始值。-
實例
// 求和 var arr = [1, 3, 5, 7, 9]; var sum = arr.reduce(function (x, y) { return x+y }); console.log(sum) // 25//是指拼接 var arr = ['1', '3', '5', '7', '9']; var sum = arr.reduce(function (x, y) { return x+y },5); console.log(sum) // 513579
-
filter
- 定義: 創(chuàng)建一個新的數(shù)組,新數(shù)組中的元素是通過檢查指定數(shù)組中符合條件的所有元素。
- 語法:
array.filter(function(currentValue,index,arr), thisValue) - 實例
var arr = [1, 2, 4, 5, 6, 9, 10, 15]; var newArr = arr.filter(function (x) { return x > 8; }); console.log(newArr) //[ 9, 10, 15 ]
以上部分的高階函數(shù)是將函數(shù)作為輸入,當(dāng)然還可以將函數(shù)作為結(jié)果值返回。
function lazy_sum(arr) {
var sum = function () {
return arr.reduce(function (x, y) {
return x + y;
});
}
return sum;
}
var f = lazy_sum([1, 2, 3, 4, 5]);
f(); // 15
當(dāng)調(diào)用lazy_sum函數(shù)時,返回的是內(nèi)層的sum函數(shù)。
在這個實例中,引出了另外一個概念:閉包
在一些語言中,在函數(shù)中可以(嵌套)定義另一個函數(shù)時,如果內(nèi)部的函數(shù)引用了外部的函數(shù)的變量,則可能產(chǎn)生閉包。運行時,一旦外部的 函數(shù)被執(zhí)行,一個閉包就形成了,閉包中包含了內(nèi)部函數(shù)的代碼,以及所需外部函數(shù)中的變量的引用。