function - 如何用简单的英语解释回调?它们与从一个函数调用另一个函数有何不同?

标签 function callback language-agnostic terminology

如何用简单的英语解释回调?它们与从另一个函数调用一个函数并从调用函数中获取一些上下文有何不同?如何向新手程序员解释它们的威力?

最佳答案

我会尽量让事情变得简单。 “回调”是由另一个函数调用的任何函数,该另一个函数将第一个函数作为参数。很多时候,“回调”是当某事发生时调用的函数。用程序员的话来说,某事可以称为“事件”。

想象一下这种情况:您将在几天内收到包裹。该包裹是送给您邻居的礼物。因此,一旦您收到包裹,您希望将其交给邻居。您出城了,因此您给您的配偶留下了指示。

你可以告诉他们去取包裹并将其带给邻居。如果你的配偶像电脑一样愚蠢,他们会坐在门口等待包裹到来(不做任何其他事情),然后一旦包裹到来,他们就会把它交给邻居。但还有更好的方法。告诉您的配偶,一旦他们收到包裹,就应该将其交给邻居。然后,他们就可以正常生活,直到收到包裹。

在我们的示例中,接收包裹是“事件”,将包裹带给邻居是“回调”。您的配偶仅在包裹到达时“执行”您的指示,将包裹送过来。好多了!

这种思维在日常生活中是显而易见的,但计算机却没有同样的常识。考虑程序员通常如何写入文件:

fileObject = open(file)
# now that we have WAITED for the file to open, we can write to it
fileObject.write("We are writing to the file.")
# now we can continue doing the other, totally unrelated things our program does

在这里,我们在写入之前等待文件打开。这“阻塞”了执行流程,并且我们的程序无法执行它可能需要执行的任何其他操作!如果我们可以这样做怎么办:

# we pass writeToFile (A CALLBACK FUNCTION!) to the open function
fileObject = open(file, writeToFile)
# execution continues flowing -- we don't wait for the file to be opened
# ONCE the file is opened we write to it, but while we wait WE CAN DO OTHER THINGS!

事实证明,我们使用一些语言和框架来做到这一点。它太酷了!查看Node.js以这种思维方式进行一些真正的练习。

关于function - 如何用简单的英语解释回调?它们与从一个函数调用另一个函数有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9596276/

相关文章:

c - 头文件和函数,是我的函数、参数还是头原型(prototype)?

android - 多次使用相同的 AlertDialog 框并更改一个变量

Jquery fadeOut/fadeIn 回调不起作用

algorithm - 功能替代品?

language-agnostic - 可运行的伪代码?

mysql - 在MySQL中,有没有某种方法可以用数字列表计算平均值?

c - 如何从 C 中的函数返回字符数组?

c - 在 STM32 上调用定时器回调时丢失指针地址

C++:带状态的回调函数

database - 关于数据库,每个开发人员都应该了解什么?