技术实践

同步回调和异步回调

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

羊先生的头像
羊先生2021.08.05 · 2 分钟阅读 · 20 阅读
同步回调和异步回调封面
文章正文还需 2 分钟

同步回调

回调的调用方式有两种:同步和异步回调

同步回调是在使用回调的高阶函数执行期间执行的

换句话说,同步回调处于阻塞状态:高阶函数要等到回调完成执行后才能完成其执行

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