回调函数(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!");
}
}