【问题标题】:When to use () after a callback function name? [duplicate]什么时候在回调函数名后使用 ()? [复制]
【发布时间】:2012-06-08 19:29:45
【问题描述】:

可能重复:
In JavaScript, does it make a difference if I call a function with parentheses?

这有什么区别:

$("a").on("click", anotherFunction);

还有这个:

$("a").on("click", anotherFunction());

有没有办法在没有匿名函数的情况下不让最后一个自可执行?

【问题讨论】:

  • 我想你想要这个:$('a').on('click', anotherFunction).triggerHandler('click');。所以该函数变成了点击处理程序并且也被立即调用。

标签: javascript


【解决方案1】:

第一个传递实际函数;第二个传递函数的返回值。

我不清楚你最后一个问题的含义。

【讨论】:

  • 我认为 OP 除了将其绑定到点击事件之外,还希望立即调用该函数。
  • 嗯。如果是这种情况,我建议将两者分开:anotherFunction(); $("a").on("click", anotherFunction);
  • jQuery 有一个 .triggerHandler() 方法用于此目的。
  • @ŠimeVidas,很好的补充。谢谢。
【解决方案2】:

anotherFunction 是对函数的引用。 anotherFunction() 是没有参数评估的函数(因此没有引用 anotherFunction)。您希望调用函数以将函数传递到预期函数的唯一原因是该函数是否返回了另一个函数。

【讨论】:

  • "因此没有引用 anotherFunction" - 这并不完全正确,因为即使没有参数,arguments 仍然存在,而 arguments.callee 是函数。
【解决方案3】:

anotherFunction 本身就是对函数本身的引用。

anotherFunction() 调用函数并返回函数返回的结果。

这是一个非常巨大的差异。

这就像两者之间的区别:

function test() {
    alert("Hello!");
}
setTimeout(test,1000); // called after one second
setTimeout(test(),1000); // called immediately, timeout fails.

【讨论】:

  • 不,只有在单击链接时才会调用anotherFunction。另一个示例将调用该函数一次,如果您单击链接,则不会发生任何事情。
  • 糟糕!抱歉,是我的错。我想知道setTimeout(test(),1000); 将超时失败,但如果例如somefunction('arg', callback()),回调是否可能在主函数完成执行之前运行?
  • 是的,回调会运行before某个函数,它的返回值会作为参数。
【解决方案4】:

您应该使用第一个。这是因为 () 执行它们之前定义的函数。如果您使用第一个,则回调 anotherFunction 仅在您需要时调用。 JQuery 会做类似 anotherFunction (在一个名为回调的 var) callback()

【讨论】:

    【解决方案5】:

    区别在于传递函数引用和调用该函数。

    第一种情况(可能是正确的)意思是:当事件发生时调用这个函数。

    第二个将被解释为:立即调用此函数并将返回的任何内容用作回调。最好是我以后可以调用的函数。

    后一种情况只有在函数定义如下时才有效:

    function anotherFunction() {
        return function() {
            //real handler
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-14
      • 2019-11-15
      • 1970-01-01
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      • 2016-03-09
      相关资源
      最近更新 更多