使用命名函数作为jquery ajax成功回调时,是否需要括号?

如果我之前定义了一个函数,在指定它应该用于成功回调时是否需要包含括号?

如果我这样做会有什么不同?

如在

function fish_food(){//do something} $.ajax({ url: '/', success: fish_food }); 

要么

 $.ajax({ url: '/', success: fish_food() }); 

fish_food本身(没有parens)充当对函数对象的引用。 它允许您将引用传递给稍后要调用的函数。

fish_food() (带有parens)是一个函数调用表达式,它导致函数被执行。 function代码将被评估并运行,并可选择返回一个值。

使用您提供的AJAX代码(以及涉及回调的所有异步JavaScript),您希望使用fish_food版本(没有parens)。 这将AJAX代码传递给您的成功函数,一旦AJAX代码完成到服务器的往返并返回,就会异步执行。

没有。

括号将告诉浏览器需要立即执行函数fish_food ,并且必须将值返回到success属性。

你想要no-parens版本。 原因是括号告诉JavaScript立即执行该函数,而不是仅仅通过名称引用它,所以你的success回调实际上是每当你执行AJAX调用时调用fish_food()的结果(这可能是是一个涉及undefined的错误)。

这会奏效

 $.ajax({ url: '/', success: fish_food }); 

你不需要括号。 使用parens将调用该函数,它需要的只是一个名称,它等同于C / C ++中的函数指针。

使用括号使函数执行然后在那里,这就是为什么你需要第一个版本的else成功存储函数的返回值。

 $.ajax({ url: '/', success: fish_food }); 

是正确的。

当您使用success: fish_food() ,它将立即执行并且返回设置为成功。