是否需要将javascript回调函数作为参数传递?
到目前为止,在我阅读的所有内容中,回调函数都作为参数传递给其他函数:是否需要将javascript回调函数作为参数传递?,javascript,callback,Javascript,Callback,到目前为止,在我阅读的所有内容中,回调函数都作为参数传递给其他函数: function mycallback(){ //dosomething } function mainfunc(mycallback){ //do something else mycallback(); } mainfunc(mycallback); 正如你所期望的那样,很好。我的问题是,是否需要将回调函数作为参数传递给mainfunc?如果你忽略这一点: function mycallbac
function mycallback(){
//dosomething
}
function mainfunc(mycallback){
//do something else
mycallback();
}
mainfunc(mycallback);
正如你所期望的那样,很好。我的问题是,是否需要将回调函数作为参数传递给mainfunc?如果你忽略这一点:
function mycallback(){
//dosomething
}
function mainfunc(){
//do something else
mycallback();
}
mainfunc();
它工作正常,与第一个示例相同。但我没有看到人们以这种方式使用回调。有什么原因吗?我遗漏了什么?从技术上讲,是的,你可以像那样使用你的函数。将函数作为参数传递的原因与将任何内容作为参数传递的原因相同
mainfunc(eatSevenBurritos);
mainfunc(eatTwoChimichangas);
在某些情况下,你可能宁愿在通过mainfunc的时候吃7个墨西哥煎饼。也许在其他情况下,你宁愿在通过mainfunc的时候吃两个chimichangas
如果您总是要运行同一个函数,那么如果可以的话,请继续在其中编写代码。增加毫无意义的复杂性是没有意义的。但是如果你需要改变这种行为,你需要把它当作一个参数
mainfunc(eatSevenBurritos);
mainfunc(eatTwoChimichangas);
当人们谈论“第一类函数”时,这种行为就是他们的意思。能够将函数视为参数。因为行为是一种数据类型。在执行异步任务时,最好使用回调 假设
mainfunc
是一个异步操作
- 在第一个示例中,您向
传递了一个特定的回调。这使您可以灵活地让调用者分配操作后要执行的函数mainfunc
- 第二个示例,您硬编码了回调。除非您有这样做的理由,比如预定的后处理功能,否则这是不灵活的
通常,当您调用使用回调的方法时,您希望它在回调中执行不同的操作,具体取决于您调用它的时间和位置。您不必在一个回调函数中处理所有不同的情况(该函数必须知道它是哪种情况),只需针对每个特定情况使用一个回调函数即可。您的第二个示例之所以有效,是因为
mycallback
存在于mainfunc
的(一个)外部作用域中。通常情况并非如此。流行的模式是使用匿名回调函数。是否应始终调用相同的mycallback
函数,还是存在多个回调函数?谢谢您的解释。我得到了一部分,但想不出任何情况下,我不能直接调用函数而不是回调。如果你能为这两种情况提供一些实际的例子,那就太好了。谢谢你的解释。我得到了一部分,但想不出任何情况下,我不能直接调用函数而不是回调。如果您能为这两种场景提供任何实用的示例,那就太好了。