什么是回调函数?
当前回答
看看图片:)
主程序使用回调函数名调用库函数(也可能是系统级函数)。此回调函数可以以多种方式实现。主程序根据需要选择一个回调。
最后,库函数在执行期间调用回调函数。
其他回答
维基百科上的回调页面很好地解释了这一点:
在计算机编程中,回调是对可执行代码或一段可执行代码的引用,作为参数传递给其他代码。这允许较低级别的软件层调用在较高级别的层中定义的子程序(或函数)。
看看图片:)
主程序使用回调函数名调用库函数(也可能是系统级函数)。此回调函数可以以多种方式实现。主程序根据需要选择一个回调。
最后,库函数在执行期间调用回调函数。
假设我们有一个函数sort(int*arraytobesorted,void(*algorithm selected)(void)),它可以接受一个函数指针作为其参数,可以在sort()实现的某个点使用。然后,这里选择的函数指针算法所处理的代码被称为回调函数。
我们可以选择任何算法,比如:
1. algorithmchosen = bubblesort
2. algorithmchosen = heapsort
3. algorithmchosen = mergesort ...
比如说,已经用原型实现了:
1. `void bubblesort(void)`
2. `void heapsort(void)`
3. `void mergesort(void)` ...
这是用于实现面向对象编程中的多态性的概念
回调函数是您指定给现有函数/方法的函数,在操作完成时调用,需要额外处理等。
例如,在Javascript中,或者更具体地说,在jQuery中,可以指定在动画完成时调用的回调参数。
在PHP中,preg_replace_callback()函数允许您提供一个在正则表达式匹配时调用的函数,将匹配的字符串作为参数传递。
开发人员常常因为该死的东西的名称而被什么是回调弄糊涂。
回调函数是一个函数,它是:
可由其他功能访问,以及在第一个函数完成后调用
想象回调函数如何工作的一个很好的方法是,它是一个“在传入函数的后面调用”的函数。
也许一个更好的名称是“call after”函数。
这个构造对于异步行为非常有用,在异步行为中,我们希望在前一个事件完成时发生活动。
伪代码:
// A function which accepts another function as an argument
// (and will automatically invoke that function when it completes - note that there is no explicit call to callbackFunction)
funct printANumber(int number, funct callbackFunction) {
printout("The number you provided is: " + number);
}
// a function which we will use in a driver function as a callback function
funct printFinishMessage() {
printout("I have finished printing numbers.");
}
// Driver method
funct event() {
printANumber(6, printFinishMessage);
}
调用event()时的结果:
The number you provided is: 6
I have finished printing numbers.
这里的输出顺序很重要。由于回调函数是在后面调用的,所以“我已经完成了数字打印”是最后一个,而不是第一个。
回调是所谓的,因为它们与指针语言一起使用。如果你不使用其中一个,就不要为“回调”这个名字而烦恼。只需理解,它只是一个名称,用来描述作为另一个方法的参数提供的方法,这样当调用父方法(无论什么条件,如按钮单击、计时器滴答声等)且其方法体完成时,就会调用回调函数。
某些语言支持支持多个回调函数参数的构造,并根据父函数的完成方式进行调用(即,在父函数成功完成的情况下调用一个回调,在父功能抛出特定错误的情况下,调用另一个回调等)。