当前位置: 首页 > 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开发的核心模式之一。

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

http://www.lqws.cn/news/572959.html

相关文章:

  • 【鸿蒙中级】
  • 微信小程序接入腾讯云短信验证码流程
  • window11 本地安装 MySQL8.0
  • 【QT】第一个QT程序 || 对象树 || 编码时的注意事项
  • 运维基础-MYSQL数据库-笔记
  • stm32 USART串口协议与外设(程序)——江协教程踩坑经验分享
  • Java面试宝典:基础六
  • MCU、LIN收发器与LIN总线是如何进行交互的?
  • stm32之测量周期
  • WPF学习笔记(13)列表框控件ListBox与数据模板
  • 开发中bs,cs都是什么意思
  • 视频跳帧播放器设计与实现
  • [Linux] PXE
  • HttpServletRequest
  • OpenCV 4.10.0 移植
  • Spring Cloud:服务监控与追踪的高级实践
  • C++ 第四阶段 STL 容器 - 第一讲:详解 std::vector
  • 5 c++核心——文件操作
  • restful规范
  • Oauth2 自定义设置token过期时间
  • HarmonyOS 公共事件机制介绍以及多进程之间的通信实现(9000字详解)
  • 【网络】:DNS协议、ICMP协议、NAT技术
  • MongoDB06 - MongoDB 地理空间
  • vllm部署私有智谱大模型
  • 疏通经脉: Bridge 联通逻辑层和渲染层
  • 模拟多维物理过程与基于云的数值分析-AI云计算数值分析和代码验证
  • 生物实验室安全、化学品安全
  • 【notes2】并发,IO,内存
  • 30套精品论文答辩开题报告PPT模版
  • Gemini cli Quickstart