JavaScript 回調(diào)函數(shù)
■知識點
把函數(shù)作為值傳入另一個函數(shù),當傳入函數(shù)被調(diào)用時,就稱為回調(diào)函數(shù),即異步調(diào)用己綁定的函數(shù)。例如,事件處理函數(shù)、定時器中的回調(diào)函數(shù),異步請求中的回調(diào)函數(shù)、replace^方法中的替換函數(shù)、數(shù)組迭代中的回調(diào)函數(shù)(sort、map、forEach、filter、some、every、reduce 和 reduceRight 等)都是回調(diào)函數(shù)的不同應用形式。這些回調(diào)函數(shù)將結(jié)合各章具體的知識點進行介紹,這里不再贅述。下面僅舉兩個示例,演示回調(diào)函數(shù)的應用。
■實例設(shè)計
【示例1】下面的代碼根據(jù)日期對對象進行排序。
//聲明3個對象,每個對象都有屬性id和date
var a = { id:1, date:new Date(2019,3,12)},
b = { id:2, date:new Date(2019,1,14) },
c = { id:3, date:new Date(2019,2,26)};
var arr = [a, b, c]; //存入 arr 數(shù)組中
arr.sort(function(x,y){
return x.date-y.date;
}); //按日期進行排序
for (var i=0; Karr, length; i++) {
console.log(arr[i].id + " " + arr[i].date.toLocaleString());
}
輸出結(jié)果:
2 2019年2月14日0:00:00
3 2019年3月26日0:00:00
1 2019年4月12日0:00:00
在數(shù)組排序的時候,會迭代數(shù)組中每個元素,并逐一調(diào)用回調(diào)函數(shù):flinction(x,y)丨return x.date-y.date;}。
【示例2】在第20章中曾經(jīng)介紹過數(shù)組的map()方法,實際上很多函數(shù)式編程語言均有此函數(shù)。 它的語法形式為:map(array, func),map表達式將flinc函數(shù)作用于array的每一個元素,并返回一個新的 array。下面使用JavaScript實現(xiàn)map(array, func)表達式運算。
function map(array, func){
var res =[];
for(var i in array) {
res.push(func(array[i]));
}
return res;
}
console.log( map([1, 3, 5, 7, 8], function(n){ //返回元素值平方
return n*n;
})); //1,9,25, 49, 64
console.log ( map ( ["one", "two", "three", "four"] , function (item) {//返回首字母大寫
return item[0].toUpperCase() + item.slice(1).toLowerCase();
})); //One,Two,Three,Four
兩次調(diào)用map得到了截然不同的結(jié)果,因為map的參數(shù)本身己經(jīng)進行了一次抽象,map函數(shù)做的是第2次抽象,高階的“階”可以理解為抽象的層次。
點擊加載更多評論>>