技术实践
同步回调和异步回调
回调的调用方式有两种:同步和异步回调,同步回调是在使用回调的高阶函数执行期间执行的

同步回调
回调的调用方式有两种:同步和异步回调
同步回调是在使用回调的高阶函数执行期间执行的
换句话说,同步回调处于阻塞状态:高阶函数要等到回调完成执行后才能完成其执行
js
function map(array, callback) {
console.log('map() 开始');
const mappedArray = [];
for (const item of array) { mappedArray.push(callback(item)) }
console.log('map() 完成');
return mappedArray;
}
function greet(name) {
console.log('greet() 被调用 ');
return `Hello, ${name}!`;
}
const persons = ['小智'];
map(persons, greet);
// map() 开始
// greet() 被调用
// map() 完成
greet()是一个同步回调函数,因为它与高阶函数map()同时执行
同步回调的例子
很多原生 JavaScript 类型的方法都使用同步回调。
最常用的是数组方法,例如array.map(callback),array.forEach(callback),array.find(callback),array.filter(callback),array.reduce(callback, init):
js
// 数组上的同步回调的示例
const persons = ['小智', '前端小智']
persons.forEach(
function callback(name) {
console.log(name);
}
);
// 小智
// 前端小智
const nameStartingA = persons.find(
function callback(name) {
return name[0].toLowerCase() === '小';
}
)
// nameStartingA // 小智
const countStartingA = persons.reduce(
function callback(count, name) {
const startsA = name[0].toLowerCase() === '小';
return startsA ? count + 1 : count;
},
0
);
countStartingA // 1