是否需要传递javascript回调函数作为参数?

时间:2012-05-25 20:50:31

标签: javascript callback

在我到目前为止所阅读的所有内容中,回调函数作为参数传递给其他函数:

function mycallback(){
    //dosomething
}

function mainfunc(mycallback){
    //do something else
    mycallback();
}

mainfunc(mycallback);

哪个有效,正如您所期望的那样。我的问题是,是否需要将回调函数作为参数传递给mainfunc?好像你省略了这个:

function mycallback(){
    //dosomething
}

function mainfunc(){
    //do something else
    mycallback();
}

mainfunc();

它工作正常,与第一个例子相同。但我没有看到人们以这种方式使用回调。有原因吗?我错过了什么?

3 个答案:

答案 0 :(得分:2)

当您有异步任务时,最好使用回调。

假设mainfunc是异步操作。

  • 在您的第一个示例中,您将特定回调传递给mainfunc。这使得调用者可以灵活地分配操作后要执行的函数。

  • 第二个例子,你硬编码回调。除非您有理由这样做,例如预定的后处理功能,否则这不灵活。

答案 1 :(得分:1)

从技术上讲,是的,您可以使用这样的功能。将函数作为参数传递的原因与将任何函数作为参数传递的原因相同。

mainfunc(eatSevenBurritos);
mainfunc(eatTwoChimichangas);

在某些条件下,也许你在通过mainfunc时宁愿吃7个墨西哥卷饼。也许在某些其他条件下,你宁愿在通过mainfunc时吃2个chimichangas。

如果您总是要运行相同的功能,那么请继续并在那里进行编码,如果可以的话。没有必要增加无意义的复杂性。但是,如果您需要更改此行为,则需要将其视为参数。

当人们谈论“头等功能”时,这种行为就是他们的意思。能够将函数视为参数。因为行为是一种数据。

答案 2 :(得分:1)

如果您想要一个函数来处理所有回调,那么第二种方法可以正常工作。

通常当您调用使用回调的方法时,您希望它在回调中的不同内容取决于您何时调用它以及从哪里调用。而不是在单个回调函数中处理所有不同的情况(然后必须知道它是哪种情况),您可以简单地为每种特定情况使用一个回调函数。