如果我之前定义了一个函数,在指定它应该用于成功回调时是否需要包含括号?
如果我这样做会有什么不同?
如在
function fish_food(){//do something}
$.ajax({
url: '/',
success: fish_food
});
或者
$.ajax({
url: '/',
success: fish_food()
});
如果我之前定义了一个函数,在指定它应该用于成功回调时是否需要包含括号?
如果我这样做会有什么不同?
如在
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
回调实际上是在fish_food()
执行 AJAX 调用时调用的结果(这可能是一个涉及undefined
)。
这会起作用
$.ajax({
url: '/',
success: fish_food
});
你不需要括号。使用括号会调用函数,它需要的只是一个相当于 C/C++ 中函数指针的名称。
有括号会导致函数在那里执行,这就是为什么你需要第一个版本,否则成功存储函数的返回值。
$.ajax({
url: '/',
success: fish_food
});
是正确的。
当你使用success: fish_food()
时,它会立即执行并且返回设置为成功。