回调函数(CallBack)
回调函数(CallBack)
1. 定义
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>数组定义</title>
<script type="text/javascript">
// 先定义一个函数,用来做短时间无法脱身的事情,这时同步
function sdo(does){
console.log(does);
}
// 再定义一个函数,用来做长时间等待,可以脱身的事情,这就是异步
function ldo(doing){
setTimeout(() => {
console.log(doing);
}, 1000)
}
// 接下来我们要做的事情是这样子的
sdo('买鸡');
sdo('杀鸡');
ldo('炖鸡');
sdo('吃鸡');
</script>
</head>
<body>
</body>
</html>
发现结果异常:
我们使用回调函数来解决
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>数组定义</title>
<script type="text/javascript">
// 先定义一个函数,用来做短时间无法脱身的事情,这时同步
function sdo(does){
console.log(does);
}
// 再定义一个函数,用来做长时间等待,可以脱身的事情,这就是异步
function ldo(doing, callback){
setTimeout(() => {
console.log(doing);
callback('吃鸡');
}, 1000)
}
// 接下来我们要做的事情是这样子的
sdo('买鸡');
sdo('杀鸡');
ldo('炖鸡', sdo);
// 而且最重要的是:可以在炖鸡的时间做很多事情
sdo('玩手机');
sdo('看电视');
sdo('思考人生');
</script>
</head>
<body>
</body>
</html>
2. C++ 中的应用
回调函数是编程中的一种设计模式,它允许你将一个函数作为参数传递给另一个函数,以便在某个特定的事件或条件下调用它。这种模式在处理异步操作或事件驱动编程时非常有用。
#include <iostream>
using namespace std;
// 定义一个回调函数类型
// 1. void:函数返回类型
// 2. (*CallbackFunction): 声明一个名为 CallbackFunction 的指针。
// 3. (int): 函数参数列表,这里的函数接受一个int类型的参数
// typedef是C/C++中的一个关键字,用于给一个现有的类型定义一个新的名字。
// 通过typedef,我们可以创建一个更易读的类型别名。
typedef void (*CallbackFunction)(int); // 定义好函数指针类型后,可以更方便地声明和使用函数指针:
// 回调函数
void myCallback(int x) {
cout << "Callback called with value: " << x << endl;
}
// 触发回调的函数
void registerCallback(CallbackFunction callback, int value) {
// 模拟一些处理
cout << "Processing..." << endl;
// 调用回调函数
callback(value);
}
int main() {
// 注册回调函数
registerCallback(myCallback, 42);
return 0;
}
3. Java 中通常使用接口实现回调机制
package callback;
// 定义回调接口
public interface Callback {
void onCallback(String message);
}
package callback;
/**
* @Author: Ronnie LEE
* @Date: 2024/7/19 - 07 - 19 - 0:44
* @Description: callback
* @version: 1.0
*/
public class Main {
public static void main(String[] args) {
new Processor().registerCallback(new MyCall());
}
}
// 实现回调接口
class MyCall implements Callback{
@Override
public void onCallback(String message) {
System.out.println("Callback called with message: " + message);
}
}
// 触发回调的类
class Processor {
public void registerCallback(Callback callback) {
// 模拟一些处理
System.out.println("Processing...");
// 调用回调函数
callback.onCallback("Hello, world!");
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2023-07-19 Redis 主从配置踩坑