什么是回调函数?
当前回答
外行的回答是,它不是由您调用的函数,而是由用户或浏览器在某个事件发生或某些代码处理后调用的函数。
其他回答
回调是将一个函数作为参数传递给另一个函数,并在流程完成后调用此函数的想法。
如果你通过上面精彩的答案得到回调的概念,我建议你应该了解它的背景。
“是什么让他们(计算机科学家)开发回调?”你可能会学到一个问题,那就是阻塞。(尤其是阻止UI)回调并不是唯一的解决方案。还有很多其他解决方案(例如:线程、期货、承诺…)。
假设我们有一个函数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)` ...
这是用于实现面向对象编程中的多态性的概念
回叫最容易用电话系统来描述。功能调用类似于打电话给某人,问她问题,得到答案,然后挂断电话;添加回拨会改变类比,这样在问她一个问题后,你也可以给她你的名字和电话号码,这样她就可以给你回拨答案。
--Paul Jakubik,“C++中的回调实现”
这使得回调听起来像方法末尾的返回语句。
我不确定这是什么。
我认为回调实际上是对一个函数的调用,是另一个函数被调用和完成的结果。
我还认为回调是为了处理原始调用,以一种“嘿!你要的东西?我已经做了-我想我会让你知道-还给你”的方式。
回调函数是您传递(作为引用或指针)到某个函数或对象的函数。此函数或对象将在以后的任何时候(可能多次)出于任何目的调用此函数:
通知任务结束请求两个项目之间的比较(如在c qsort()中)报告流程的进度通知事件委托对象的初始化授权绘制区域
...
因此,将回调描述为在另一个函数或任务结束时调用的函数过于简单(即使这是一个常见的用例)。