繁体   English   中英

将命名函数用作jQuery ajax成功回调时需要括号吗?

[英]do I need parenthesis when using a named function as an jquery ajax success callback

如果我有一个较早定义的函数,则在指定将其用于成功回调时是否需要包括括号?

如果我这样做有什么区别?

function fish_food(){//do something}

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

要么

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

fish_food本身(不带括号)充当对功能对象的引用。 它允许您将引用传递给该函数,以便日后调用。

fish_food() (带括号)是一个函数调用表达式,它使函数被执行。 函数代码将被评估并以可选返回的值运行。

使用您提供的AJAX代码(以及涉及回调的所有异步JavaScript),您想使用fish_food版本(不带括号)。 这会将AJAX代码传递给您的成功功能参考,一旦AJAX代码完成了往返服务器的往返行程,就将异步执行该代码。

没有。

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

您需要无括号的版本。 原因是括号告诉JavaScript立即执行该函数,而不是仅按名称引用它,因此, success回调实际上是在执行AJAX调用时调用fish_food()的结果(可能会是涉及undefined的错误)。

这会工作

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

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

带有括号会导致函数在那儿执行,这就是为什么需要第一个版本,否则成功存储函数的返回值的原因。

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

是正确的。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM