1

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

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

如在

function fish_food(){//do something}

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

或者

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

7 回答 7

5

fish_food它本身(没有括号)充当对函数对象的引用。它允许您传递对函数的引用,以便在以后调用。

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

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

于 2012-08-28T17:28:48.630 回答
4

不。

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

于 2012-08-28T17:22:57.653 回答
0

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

于 2012-08-28T17:22:33.233 回答
0

这会起作用

$.ajax({
    url: '/',
    success: fish_food
});
于 2012-08-28T17:23:03.437 回答
0

你不需要括号。使用括号会调用函数,它需要的只是一个相当于 C/C++ 中函数指针的名称。

于 2012-08-28T17:23:04.980 回答
0

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

于 2012-08-28T17:23:28.780 回答
0
$.ajax({
    url: '/',
    success: fish_food
});

是正确的。

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

于 2012-08-28T17:23:48.993 回答