“回调”是由另一个函数调用的任何函数,该函数将第一个函数作为参数。很多的时候,一个“回调”是一个时被调用函数事情发生。在程序员说话中,这个东西可以被称为“事件”。
想象一下这种情况:您期待在几天内获得一个包。包裹是给邻居的礼物。因此,一旦你得到包裹,你想要它带到邻居。你不在城里,所以你要为你的配偶留下指示。
您可以告诉他们获取包裹并将其带给邻居。如果你的配偶和计算机一样愚蠢,他们会坐在门口等待包裹直到它来了(没有做任何事情)然后一旦它来了,他们就会把它带到邻居家。但是有更好的方法。告诉你的配偶,一旦他们收到包裹,他们应该把它带到邻居家。然后,他们可以正常生活,直到他们收到包裹。
在我们的例子中,包的接收是“事件”,并且将它带到邻居是“回调”。您的配偶“运行”您的指示,仅在包裹到达时将包裹带过来。好多了!
这种想法在日常生活中是显而易见的,但计算机没有同样的常识。考虑一下程序员通常如何写入文件:
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!