如何用简单的英语解释回调?它们与从一个函数调用另一个函数从调用函数获取上下文有什么不同?如何向新手程序员解释它们的强大功能?
当前回答
您有一些想要运行的代码。通常,当你调用它时,你会等待它在你继续之前完成(这可能会导致你的应用程序变灰/产生游标的旋转时间)。
另一种方法是并行运行此代码并继续您自己的工作。但是,如果原始代码需要根据它所调用的代码的响应做不同的事情,该怎么办?在这种情况下,您可以传递您希望它在完成时调用的代码的名称/位置。这是一个“回电”。
正常代码:询问信息->处理信息->处理结果->继续做其他事情。
使用回调:Ask for Information->Process Information->继续执行其他操作。在稍后的某个点->处理处理的结果。
其他回答
您有一些想要运行的代码。通常,当你调用它时,你会等待它在你继续之前完成(这可能会导致你的应用程序变灰/产生游标的旋转时间)。
另一种方法是并行运行此代码并继续您自己的工作。但是,如果原始代码需要根据它所调用的代码的响应做不同的事情,该怎么办?在这种情况下,您可以传递您希望它在完成时调用的代码的名称/位置。这是一个“回电”。
正常代码:询问信息->处理信息->处理结果->继续做其他事情。
使用回调:Ask for Information->Process Information->继续执行其他操作。在稍后的某个点->处理处理的结果。
你觉得不舒服,所以去看医生。他检查了你的身体,认为你需要一些药物治疗。他开了一些药,并把处方打电话到你当地的药店。你回家吧。稍后,你的药房打电话告诉你,你的处方已经准备好了。你去捡吧。
我认为这很容易解释。
一开始回调只是普通的函数。 更进一步说,我们从另一个函数(我们称它为B)内部调用这个函数(我们称它为A)。
神奇的是,我决定哪个函数应该被B外部的函数调用。
当我写函数B的时候,我不知道应该调用哪个回调函数。 当我调用函数B的时候,我也让这个函数调用函数a,就这样。
这是关于下载网页的:
Your program runs on a cellphone and is requesting the webpage http://www.google.com. If you write your program synchronously, the function you write to download the data will be running continuously until all the data is download. This means your UI will not refresh and will basically appear frozen. If you write your program using callbacks, you request the data and say "execute this function when you've finished." This allows the UI to still allow user interaction while the file is downloading. Once the webpage has finished downloading, your result function (callback) is called and you can handle the data.
基本上,它允许你请求一些东西,并在等待结果的同时继续执行。一旦结果通过回调函数返回给您,您就可以从它停止的地方开始操作。
隐喻性的解释:
我有一个包裹要寄给一个朋友,我也想知道我的朋友什么时候收到。
所以我把包裹带到邮局,让他们把它送到。如果我想知道我的朋友什么时候收到包裹,我有两个选择:
我可以在邮局等邮件送到。
(b)邮件送达后我会收到电子邮件。
选项(b)类似于回调。