可能的重复项:
在 JavaScript 中,如果我调用一个带括号的函数会有什么区别吗?
这有什么区别:
$("a").on("click", anotherFunction);
而这个:
$("a").on("click", anotherFunction());
有没有办法在没有匿名功能的情况下不使最后一个自我可执行?
第一个传递实际函数;第二个传递函数的返回值。
我不清楚你最后一个问题的含义。
anotherFunction
是对函数的引用。 anotherFunction()
是没有参数计算的函数(因此没有对anotherFunction
的引用)。您希望在需要函数的位置调用要传递的函数的唯一原因是该函数是否返回了另一个函数。
anotherFunction
本身就是对函数本身的引用。
anotherFunction()
调用函数并生成函数返回的任何结果。
这是一个极其巨大的差异。
这就像两者之间的区别:
function test() {
alert("Hello!");
}
setTimeout(test,1000); // called after one second
setTimeout(test(),1000); // called immediately, timeout fails.
你应该使用第一个。这是因为 () 执行在它们之前定义的函数。如果使用第一个,则仅在您希望调用时调用回调 otherFunction。JQuery 会做类似 otherFunction (在名为 callback 的变量中) callback()
区别在于传递函数引用和调用该函数。
第一种情况(可能是正确的)意味着:在事件发生时调用此函数。
第二个将解释为:立即调用此函数并使用返回的任何内容作为回调。它最好是一个我以后可以调用的函数。
仅当函数定义如下时,后一种情况才有效:
function anotherFunction() {
return function() {
//real handler
}
}