什么是回调函数?


当前回答

回调函数是您指定给现有函数/方法的函数,在操作完成时调用,需要额外处理等。

例如,在Javascript中,或者更具体地说,在jQuery中,可以指定在动画完成时调用的回调参数。

在PHP中,preg_replace_callback()函数允许您提供一个在正则表达式匹配时调用的函数,将匹配的字符串作为参数传递。

其他回答

回调函数作为参数传递给另一个函数的函数。

function test_function(){       
 alert("Hello world");  
} 

setTimeout(test_function, 2000);

注意:在上面的示例中,test_function用作setTimeout函数的参数。

回调函数是在满足特定条件时应调用的函数。回调函数不是立即调用,而是在将来的某个时间点调用。

通常,当一个任务正在启动时,它将异步完成(即在调用函数返回后一段时间完成)。

例如,请求网页的函数可能要求其调用方提供回调函数,该回调函数将在网页完成下载时调用。

一个重要的使用领域是将一个函数注册为句柄(即回调),然后发送消息/调用某个函数来执行某些工作或处理。现在,处理完成后,被调用的函数将调用我们注册的函数(即,现在回调完成),从而表明处理完成。这个维基百科链接以图形方式解释得很好。

回调函数是您传递(作为引用或指针)到某个函数或对象的函数。此函数或对象将在以后的任何时候(可能多次)出于任何目的调用此函数:

通知任务结束请求两个项目之间的比较(如在c qsort()中)报告流程的进度通知事件委托对象的初始化授权绘制区域

...

因此,将回调描述为在另一个函数或任务结束时调用的函数过于简单(即使这是一个常见的用例)。

开发人员常常因为该死的东西的名称而被什么是回调弄糊涂。

回调函数是一个函数,它是:

可由其他功能访问,以及在第一个函数完成后调用

想象回调函数如何工作的一个很好的方法是,它是一个“在传入函数的后面调用”的函数。

也许一个更好的名称是“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.

这里的输出顺序很重要。由于回调函数是在后面调用的,所以“我已经完成了数字打印”是最后一个,而不是第一个。

回调是所谓的,因为它们与指针语言一起使用。如果你不使用其中一个,就不要为“回调”这个名字而烦恼。只需理解,它只是一个名称,用来描述作为另一个方法的参数提供的方法,这样当调用父方法(无论什么条件,如按钮单击、计时器滴答声等)且其方法体完成时,就会调用回调函数。

某些语言支持支持多个回调函数参数的构造,并根据父函数的完成方式进行调用(即,在父函数成功完成的情况下调用一个回调,在父功能抛出特定错误的情况下,调用另一个回调等)。