什么是回调?
回调是一个用作另一个函数的参数的函数,这种方式函数能够调用另一个函数。
听起来有些复杂,不是吗?让我们分解…
首先,了解JavaScript中的函数如何运行
在JavaScript中,函数根据您所调用的顺序(告诉他们开始执行)不按照您定义(写)的顺序运行。
定义功能:
function first() {
return “I am first”;
}
function second() {
return “I am second”;
}
以相反的顺序调用函数:
second();
first();
哪一个要首先被称为?
我们第一个称为-Second();结果,我们将看到输出â€我是第二;
但是,有时在某些情况下,我们要控制哪些功能在运行时运行,并以特定顺序调用它们是不够的。这是为什么它并不总是有帮助的一个示例。
选项1
定义功能:
function displayResults(results) {
//some code running
document.getElementById(“results”).innerHTML = results;
}
function googleSomething(keyword) {
//some code running
return searchResults;
}
按期望的顺序调用功能:
Let searchKeyword = googleSomething(“How to JavaScript”);
displayResults(searchKeyword);
为什么选项1并不总是有用的?
因为您必须不断调用所有功能,并且当您拥有很多功能时,它可能会变得凌乱,并且最终可能会获得不需要或忘记它们的额外功能。还有其他原因吗?下面评论。
选项2
定义功能:
function displayResults(results) {
//some code running
document.getElementById(“results”).innerHTML = results;
}
function googleSomething(keyword) {
//some code running
displayResults(searchResults);
}
仅调用搜索功能:
googleSomething(“How to JavaScript”);
为什么选项2并不总是有用的?
因为您将无法防止Googlesomething函数不显示 searchResults ,所以它始终在其内部运行DisplayResults功能。
在这种情况下,回调如何帮助?
您可以使用回调函数,而不是在不需要的情况下手动编写函数呼叫或运行该函数。您将这样做的是,直到第一个功能准备返回结果之前,第二个功能(回调函数)才能运行。简而言之,如果您不运行第一个功能,那么第二个功能将永远不会运行。
定义功能:
function displayResults(results) {
//some code running
document.getElementById(“results”).innerHTML = results;
}
function googleSomething(keyword, **displayResults**) {
//some code running
displayResults(searchResults);
}
仅调用搜索功能:
googleSomething(“How to JavaScript”, **displayResults**);
googlesomething函数中的第二个参数显示为回调!并快速注意:将函数作为回调传递时,您不需要调用它,只需传递名称,不需要括号。
我什么时候需要使用回调函数?
首先,您需要了解什么是异步功能。有很多事情,但我会尽力而为地解释它。
JavaScript中有异步的函数类型 - 它们与整个代码不同步。他们将需要执行可能需要大量时间的代码,而不是停止所有内容,而是在后面工作。
让我们以麦当劳(不是麦当劳的忠实拥护者)这样的愚蠢榜样 - 当您点一餐时,您继续前进并等待它的准备。
同时,其他人在等待时也会下订单。队列中的所有人都不会等到您订购直到您的饭菜完成,直到您吃饭为止。为每个客户提供服务需要花费太多时间,对
不是一个很好的例子,但我认为这在某种程度上是相似的。在这种情况下,您的订单准备功能将异步。当人们下订单或等待时,食物准备功能正在执行过程中。
因此,在这种情况下,回调功能将是什么?
由于原因,回调函数称为回调!功能说,给我回电话!最后说,我们的食物制备的异步功能已经完成了执行,并准备为您带来结果。而且您想在收到此结果之前运行另一个功能,一个回调功能将调用您的姓名和订单名称!
,但是您不想只有在食物准备就绪时只能打电话给您的名字,对ðÖ
为了实现这一目标,您将附加给我的姓名功能来准备食物。因此,当食物准备功能完成后,它将运行调用您名字的回调功能!
简而言之,回调函数是仅当执行第一个函数时执行的另一个函数的参数。
关于回调还有很多其他有趣的事情,但让我们停在这里只是为了基本的理解。
这是否有意义? ð请让我知道