JavaScript 回调函数
■知识点
把函数作为值传入另一个函数,当传入函数被调用时,就称为回调函数,即异步调用己绑定的函数。例如,事件处理函数、定时器中的回调函数,异步请求中的回调函数、replace^方法中的替换函数、数组迭代中的回调函数(sort、map、forEach、filter、some、every、reduce 和 reduceRight 等)都是回调函数的不同应用形式。这些回调函数将结合各章具体的知识点进行介绍,这里不再赘述。下面仅举两个示例,演示回调函数的应用。
■实例设计
【示例1】下面的代码根据日期对对象进行排序。
//声明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 数组中
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());
}
输出结果:
2 2019年2月14日0:00:00
3 2019年3月26日0:00:00
1 2019年4月12日0:00:00
在数组排序的时候,会迭代数组中每个元素,并逐一调用回调函数:flinction(x,y)丨return x.date-y.date;}。
【示例2】在第20章中曾经介绍过数组的map()方法,实际上很多函数式编程语言均有此函数。 它的语法形式为:map(array, func),map表达式将flinc函数作用于array的每一个元素,并返回一个新的 array。下面使用JavaScript实现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
两次调用map得到了截然不同的结果,因为map的参数本身己经进行了一次抽象,map函数做的是第2次抽象,高阶的“阶”可以理解为抽象的层次。
点击加载更多评论>>