使用命名函数作为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()
,它将立即执行并且返回设置为成功。