什么是回调函数?
当前回答
我在这个问题上已经迟到了13年,但在我自己学习之后,我想我应该在这里再加一个答案,以防有人像我一样困惑。
其他答案总结了“回调是什么?”这一问题的症结所在
它只是一个函数,在完成某个任务时调用另一个函数。
让我感动的是这样的例子:“你做了这个,现在做了那个。”比如,当我自己可以调用一个方法或函数时,为什么我会这样使用它?
所以这里有一个快速、真实的例子,希望它能让某人“点击”。
超伪码
首先,你会遇到的核心问题。。。。
Multithreaded Method(Some arguments)
{
Do fancy multithreaded stuff....
}
Main()
{
Some stuff I wanna do = some tasks
Multhreaded Method(Some stuff I wanna do)
}
如果在没有任何回调的情况下运行该程序,则程序看起来就像是退出了。因为“花式多线程程序”正在另一个进程上运行。
所以你挠挠头想:“见鬼,我怎么知道什么时候完成?”
繁荣。。。回调
IsItDone = false
Callback()
{
print("Hey, I'm done")
IsItDone = true
}
Multithreaded Method(Some arguments, Function callback)
{
Do fancy multithreaded stuff....
}
Main()
{
Some stuff I wanna do = some tasks
Multhreaded Method(Some stuff I wanna do,Callback)
while(!IsItDone)
Wait a bit
}
这100%不是实现它的最佳方式,我只是想给出一个明确的例子。
所以这并不是简单的“回调是什么?”它是“回调是什么,它有什么好处???”
其他回答
这使得回调听起来像方法末尾的返回语句。
我不确定这是什么。
我认为回调实际上是对一个函数的调用,是另一个函数被调用和完成的结果。
我还认为回调是为了处理原始调用,以一种“嘿!你要的东西?我已经做了-我想我会让你知道-还给你”的方式。
回调函数是您指定给现有函数/方法的函数,在操作完成时调用,需要额外处理等。
例如,在Javascript中,或者更具体地说,在jQuery中,可以指定在动画完成时调用的回调参数。
在PHP中,preg_replace_callback()函数允许您提供一个在正则表达式匹配时调用的函数,将匹配的字符串作为参数传递。
假设我们有一个函数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)` ...
这是用于实现面向对象编程中的多态性的概念
维基百科上的回调页面很好地解释了这一点:
在计算机编程中,回调是对可执行代码或一段可执行代码的引用,作为参数传递给其他代码。这允许较低级别的软件层调用在较高级别的层中定义的子程序(或函数)。
我在这个问题上已经迟到了13年,但在我自己学习之后,我想我应该在这里再加一个答案,以防有人像我一样困惑。
其他答案总结了“回调是什么?”这一问题的症结所在
它只是一个函数,在完成某个任务时调用另一个函数。
让我感动的是这样的例子:“你做了这个,现在做了那个。”比如,当我自己可以调用一个方法或函数时,为什么我会这样使用它?
所以这里有一个快速、真实的例子,希望它能让某人“点击”。
超伪码
首先,你会遇到的核心问题。。。。
Multithreaded Method(Some arguments)
{
Do fancy multithreaded stuff....
}
Main()
{
Some stuff I wanna do = some tasks
Multhreaded Method(Some stuff I wanna do)
}
如果在没有任何回调的情况下运行该程序,则程序看起来就像是退出了。因为“花式多线程程序”正在另一个进程上运行。
所以你挠挠头想:“见鬼,我怎么知道什么时候完成?”
繁荣。。。回调
IsItDone = false
Callback()
{
print("Hey, I'm done")
IsItDone = true
}
Multithreaded Method(Some arguments, Function callback)
{
Do fancy multithreaded stuff....
}
Main()
{
Some stuff I wanna do = some tasks
Multhreaded Method(Some stuff I wanna do,Callback)
while(!IsItDone)
Wait a bit
}
这100%不是实现它的最佳方式,我只是想给出一个明确的例子。
所以这并不是简单的“回调是什么?”它是“回调是什么,它有什么好处???”