【问题标题】:Javascript function in setIntervalsetInterval 中的 Javascript 函数
【发布时间】:2014-01-20 00:51:51
【问题描述】:

我有以下代码:

var foo=5;
var los= function (){
    alert(foo);};
setInterval(los, 1000);

正常工作。

如果我将其更改为:

var los= function (){
    alert(foo);};
setInterval(los(), 1000);

它只执行一次,在控制台中没有错误。 有人能解释一下为什么当我在 los 之后的 setInterval 函数中包含双亲时会发生这种情况吗?

【问题讨论】:

    标签: javascript function setinterval parentheses


    【解决方案1】:

    因为您正在执行los(),然后该(单次)执行的结果被传递到setInterval 函数中。

    setInterval 需要传入一个函数,而不是 undefined,这是 los 返回的。然而,它不会抱怨——它只是什么都不做。

    【讨论】:

      【解决方案2】:

      请记住,在 JavaScript 中,函数是一个对象,可以像任何其他变量一样被传递。所以这是对函数的引用:

      los
      

      另一方面,执行函数并计算其结果:

      los()
      

      所以当你这样做时:

      setInterval(los(), 1000)
      

      您没有将间隔设置为函数,而是设置为函数的结果。因此,例如,如果函数返回 true,那么您实际上是在编写以下代码:

      setInterval(true, 1000)
      

      函数执行一次,然后间隔重复其结果。您想要的是在区间内使用函数引用本身:

      setInterval(los, 1000)
      

      这样setInterval 将在每个间隔执行函数,而不是执行其结果(不执行任何操作)。

      【讨论】:

        【解决方案3】:

        第二个中的() 意味着调用函数将结果传递给setInterval。括号是明确要求调用函数的运算符;毕竟,这就是为什么要将括号括在 setInterval 的参数周围。

        函数名本身就是 JavaScript 中的有效表达式。这种表达式的值是对函数的引用。这是您在设置间隔计时器时想要的值——您想告诉系统在计时器到期时调用什么函数,因此您传递对它的引用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-12-06
          • 1970-01-01
          • 1970-01-01
          • 2021-04-09
          • 1970-01-01
          • 2012-08-19
          • 2020-05-03
          • 1970-01-01
          相关资源
          最近更新 更多