什么是回调函数?


当前回答

我在这个问题上已经迟到了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%不是实现它的最佳方式,我只是想给出一个明确的例子。

所以这并不是简单的“回调是什么?”它是“回调是什么,它有什么好处???”

其他回答

回调是将一个函数作为参数传递给另一个函数,并在流程完成后调用此函数的想法。

如果你通过上面精彩的答案得到回调的概念,我建议你应该了解它的背景。

“是什么让他们(计算机科学家)开发回调?”你可能会学到一个问题,那就是阻塞。(尤其是阻止UI)回调并不是唯一的解决方案。还有很多其他解决方案(例如:线程、期货、承诺…)。

看看图片:)

主程序使用回调函数名调用库函数(也可能是系统级函数)。此回调函数可以以多种方式实现。主程序根据需要选择一个回调。

最后,库函数在执行期间调用回调函数。

回调与回调函数

回调是在另一个函数完成执行后执行的函数 — 因此得名“回电”。

什么是回调函数?

将Funs(即函数对象)作为参数或返回Funs的函数称为高阶函数。任何作为参数传递的函数都称为回调函数。回调函数是作为参数传递给另一个函数(让我们调用这个其他函数otherFunction)的函数,回调函数在otherFunction内部调用(或执行)。

    function action(x, y, callback) {
        return callback(x, y);
    }
    
    function multiplication(x, y) {
        return x * y;
    }
    
    function addition(x, y) {
        return x + y;
    }

    alert(action(10, 10, multiplication)); // output: 100

    alert(action(10, 10, addition)); // output: 20

在SOA中,回调允许插件模块从容器/环境访问服务。

来源

这使得回调听起来像方法末尾的返回语句。

我不确定这是什么。

我认为回调实际上是对一个函数的调用,是另一个函数被调用和完成的结果。

我还认为回调是为了处理原始调用,以一种“嘿!你要的东西?我已经做了-我想我会让你知道-还给你”的方式。

CallAfter将是一个比callback这个愚蠢的名字更好的名字。当或如果某个函数满足条件,则调用另一个函数,即CallAfter函数,即作为参数接收的函数。

与其在函数中硬编码内部函数,不如编写一个函数来接受已经编写的CallAfter函数作为参数。可能会根据接收参数的函数中的代码检测到的状态更改来调用CallAfter。