当前位置: 首页 > news >正文

JavaScript中的回调函数详解

JavaScript中的回调函数详解

1.1 概念

1.1.1 什么是回调函数

**回调函数(Callback Function)**是你将一个函数的引用(指针)作为参数传递给另一个函数,在那个函数完成任务后调用回来执行你传递的函数。简单的来说就是回调函数是作为参数传递给另一个函数,目的是让接受它的函数在特定条件满足、异步操作完成或事件发生的时候回调它

1.1.2 关键特征

  1. 传而不调用的机制
    • 你把函数A作为参数传递给B
    • 函数B暂时不调用A,而是保存它的引用
    • 当指定情况发生的时候,(事件触发/异步操作完成后),函数B才会调用它
// 经典回调结构
主函数(回调函数); // 传递时不执行function 主函数(cb) {// ...处理某些操作...cb(); // 满足条件时才回调(调用)
}
  • 回:让代码执行流程回到调用者
  • 调:由被调用方决定何时执行
  • 函数:传递的是一段可执行的代码逻辑

1.1.2 现实世界的比喻

想想你去饭馆点餐:

  1. 你点了一份需要时间才能做好的饭菜(启动异步任务)
  2. 服务员给你一个取餐号(获得回调标识)
  3. 你去座位上喝茶(继续执行主线程代码)
  4. 厨师完成菜肴(后台处理完成)
  5. 服务员喊你的号码:123取餐(触发回调)
  6. 你凭借着号码牌取餐(执行回调函数处理结果)

整个过程的关键:你不需要等待,系统会在合适的时间通知你

1.2 代码中的三种回调函数形式

2.1 同步回调

// 定义接收回调的函数
function processArray(arr, callback) {const result = [];for (const item of arr) {result.push(callback(item)); // 立即调用!}return result;
}// 使用
const doubled = processArray([1, 2, 3], x => x * 2);
console.log(doubled); // [2, 4, 6]

image-20250628140436137

2.2 异步回调(延迟回呼)

   //2.异步回调// 模拟异步任务function fetchData(url,callback){setTimeout(()=>{const data = `${url}获取的数据`;callback(data)},5000*4);}//使用 fetchData('api/users',data=>{console.log('收到的数据',data)})console.log("请求已发送,继续执行其他任务...")

img

2.3 事件回调

<Button id = "myButton">点击我</Button>

document.getElementById('myButton').addEventListener('click',()=>{console.log('按钮被点击了!')//当按钮被点击时执行
})

img

2.3.1 什么是事件回调

回调函数是指:将一个函数作为参数传递给另一个函数,并在特定事件发生或者条件满足时才被调用的函数

在事件处理中:

  1. 事件发生:用户执行了某些操作(比如点击按钮)
  2. 系统调用-浏览器自动出发之前“注册”的回调函数
  3. 执行操作-回调函数中的代码被执行

2.3.2 代码中的回调关系

//结构解析
元素.addEventListener('事件类型',回调函数)//具体实例:
document.getElementById('myButton').addEventListener(
'click'  //事件类型
() =>{
console.log('按钮被点击了!')  //回调函数
}
)

为什么是“回调”的三个关键点

  1. 函数作为参数传
    • ()=》{console.log(…)}这个匿名函数作为参数传递给了addEventListener()方法
  2. 延迟执行
    • 这个函数不会立即执行
    • 它会一直等待,直到特定事件(这里是点击事件)发生的时候才会被调用
  3. 反向调用
    • 你不是主动调用它
    • 而是由浏览器在事件触发时“反回来调用”你注册的函数
类比生活中的回调:

想象你寄快递:

  1. 你把包裹(回调函数)交给快递员(addEventListener
  2. 你告诉快递员:“当收件人签收时(事件发生),请通知我(执行操作)”
  3. 之后你就去做其他事(代码继续执行)
  4. 当收件人真正签收时(用户点击按钮),快递员打电话给你(执行回调函数)

2.3.3 回调的核心特点:

特点说明代码体现
注册机制需要提前设置好响应事件的函数addEventListener
异步性事件何时发生不确定代码注册后不立即执行
事件驱动由外部事件触发执行等待用户点击操作
反转控制权由系统调用你的代码浏览器控制函数调用时机

在JavaScript中,事件处理基本都是采用这种回调机制,这被称为事件驱动编程(Event-Driven Programming),是Web开发的核心模式之一。

所以叫它"事件回调",是因为你把一个函数("叫"它做什么)交给了事件系统,事件系统在特定事件发生后"回过来调用"你给它的函数。

相关文章:

  • Springboot 集成 SpringBatch 批处理组件
  • 软件著作权人的权利
  • 【系统分析师】高分论文:论软件开发模型及应用
  • GitHub vs GitLab 全面对比报告(2025版)
  • 大模型小模型选型手册:开源闭源、国内国外全方位对比
  • Vulkan 学习(18)---- 使用 ValidationLayer
  • Function Calling与MCP的区别
  • python训练day44 预训练模型
  • Windows系统安装鸿蒙模拟器
  • 原型设计Axure RP网盘资源下载与安装教程共享
  • wpf的Binding之UpdateSourceTrigger
  • Go语言--语法基础6--基本数据类型--数组类型(2)
  • MATLAB GUI界面设计 第七章——高级应用
  • 领域驱动设计(DDD)【26】之CQRS模式初探
  • 大语言模型训练阶段
  • Tang Prime 20K板OV2640例程
  • 30套精品论文答辩开题报告PPT模版
  • (八)聚类
  • node js入门,包含express,npm管理
  • 【3.3】Pod详解——容器探针部署第一个pod