找回密码
 立即注册
搜索
查看: 268|回复: 1

[基础语法] 什么叫做回调函数

[复制链接]

581

主题

110

回帖

4066

积分

管理员

积分
4066

众神之神

发表于 2024-12-23 14:55:08 | 显示全部楼层 |阅读模式
回调函数(Callback Function)是指作为参数传递给另一个函数的函数。在 JavaScript 中,回调函数通常用于处理异步操作、事件处理或在某些操作完成后执行特定的代码。

1.回调函数的特点
作为参数传递:
回调函数可以作为参数传递给其他函数。这使得函数可以在特定条件下调用这些回调函数。

2. 异步编程:
在处理异步操作(如网络请求、定时器等)时,回调函数非常常见。它们允许你在异步操作完成后执行某些代码,而不阻塞主线程。

3. 事件处理:
在事件驱动的编程中,回调函数用于处理用户的输入或其他事件。例如,点击按钮时执行某个函数。

示例代码
  1. function fetchData(callback) {
  2.     // 模拟异步操作,例如网络请求
  3.     setTimeout(() => {
  4.         const data = { message: "数据加载完成" };
  5.         callback(data); // 调用回调函数并传递数据
  6.     }, 2000);
  7. }

  8. function handleData(data) {
  9.     console.log(data.message); // 处理数据
  10. }

  11. // 调用 fetchData,并传入 handleData 作为回调函数
  12. fetchData(handleData);
复制代码

解释:
1.fetchData 函数:
这个函数模拟了一个异步操作(例如网络请求),使用 setTimeout 来模拟延迟。
它接受一个回调函数 callback 作为参数。

2.handleData 函数:
这是一个回调函数,用于处理从 fetchData 函数获取的数据。

3. 调用:
当 fetchData 被调用时,handleData 被作为回调函数传递进去。
在 2 秒后,fetchData 会调用 callback(data),这实际上是调用 handleData(data),并将数据传递给它。

总结
回调函数是一种强大的编程模式,允许你在函数执行完成后执行特定的代码。它们在 JavaScript 中广泛应用于异步编程和事件处理,使得代码更加灵活和可扩展。

581

主题

110

回帖

4066

积分

管理员

积分
4066

众神之神

 楼主| 发表于 2025-11-6 10:40:37 | 显示全部楼层
通俗的理解:

想象一个场景:你(主函数)让你朋友(另一个函数)帮你去楼下取快递。

1. 同步模式(没有回调函数)
你说:“朋友,帮我去取快递。”
朋友说:“好。”
然后你就站在原地,什么都不干,一直等
直到朋友把快递拿到你面前,你才继续做下一件事(比如拆快递)。
缺点:在等待的这段时间里,你被“卡住”了,完全浪费了。

2. 异步模式(使用回调函数)
这种情况更聪明:
1. 你说:“朋友,帮我去取快递,取到了就给我送到客厅桌子上(这是一个预先说好的动作)。
2. 说完这句话,你不用站在原地傻等,可以马上去做别的事情,比如去刷手机、打游戏。
3. 你朋友在楼下取到快递后,他会自动地、主动地执行你之前交代的“送到客厅桌子上”这个动作。
你打完一局游戏,去客厅,发现快递已经在那儿了。


把这个场景翻译成 JavaScript 代码:


  1. // 1. 首先,定义你让朋友“取到快递后要做的事”
  2. // 这就是一个“回调函数”
  3. function 快递到了之后(快递内容) {
  4.   console.log(`我把快递【${快递内容}】放到客厅桌子上了!`);
  5. }
  6. // 2. 你的朋友就是一个函数,他接受两个参数:
  7. //    - 取件码 (他工作需要的信息)
  8. //    - 一个“取到后要做的事”的指令 (这就是回调函数!)
  9. function 朋友(取件码, 取到后要做的事) {
  10.   console.log(`好的,我用取件码【${取件码}】去取快递...`);
  11.   // 模拟下楼的耗时(比如2秒)
  12.   setTimeout(() => {
  13.     // 假设这就是取到的快递
  14.     const 取到的快递 = "一本新买的书";
  15.     // !!!最重要的部分来了!!!
  16.     // 朋友取到快递后,他“回调”了你给他的那个函数
  17.     // 也就是说,他主动执行了你之前交代的任务
  18.     取到后要做的事(取到的快递);
  19.   }, 2000);
  20. }
  21. // 3. 你开始派任务
  22. console.log("我开始派朋友去取快递");
  23. 朋友("123456", 快递到了之后); // 把“回调函数”作为参数传进去
  24. console.log("我继续去打游戏了...(主线程继续执行)");
  25. // 执行结果会是这样:
  26. // > "我开始派朋友去取快递"
  27. // > "好的,我用取件码【123456】去取快递..."
  28. // > "我继续去打游戏了...(主线程继续执行)"
  29. // (等待2秒后...)
  30. // > "我把快递【一本新买的书】放到客厅桌子上了!"
复制代码



核心总结:
1. 回调函数是什么?
2. 就是一个函数A,被当做参数传给另一个函数B函数B在完成自己的任务后,会自动调用这个传进来的函数A
3. 为什么用它?(主要目的)
4. 为了实现 “异步编程” 。让耗时的操作(如取快递、读文件、网络请求)在后台慢慢做,而不阻塞主程序。主程序可以继续往下执行,等耗时操作完成时,通过回调函数来“通知”你结果。
5. 关键理解点:
l 你不是“调用”回调函数,你是“定义”它然后“传递”它。
l 是接收你函数的那个函数(你朋友)在合适的时机“调用”它。
l JavaScript中,这种模式无处不在,尤其是在处理事件、定时器、网络请求时。
简单说:回调函数就是“事后诸葛亮”——你先告诉程序一件事完成后该怎么做,然后就不用管了,程序做完那件事后会自己回来执行你交代的步骤。


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|十三博客 ( 鲁ICP备2023000528号 )

GMT+8, 2026-6-1 16:12 , Processed in 0.050421 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表