【问题标题】:setTimeout in javascript within function [duplicate]函数内javascript中的setTimeout [重复]
【发布时间】:2013-03-29 09:02:21
【问题描述】:

我有两个函数,如下所示,

func1 = function(){
    console.log("func1 is called"); 
}

func2 = function(){
    console.log("func2 is called");
    setTimeout(func1(),10000) 
}

当我拨打func2() 之类的电话时。我得到了输出,但不是预期的输出。如您所见,我在func2 中使用了setTimeout(),并且我预计在func1 执行之前会出现一些延迟。

但是没有观察到延迟,两条线同时打印到控制台。我在这里做错了什么还是我错过了什么?请帮忙..

【问题讨论】:

    标签: javascript function settimeout


    【解决方案1】:

    引用函数时,需要去掉括号。

    setTimeout(func1,10000);
    

    【讨论】:

      【解决方案2】:

      删除调用 setTimeout 中 func1 之后的括号。

      setTimeout 函数需要一个函数reference

      您的代码在打印警报后将调用 func1 的结果传递给 setTimeout()

      当括号跟在函数名后面时,它们会导致函数被调用。

      func1 = function () {
          alert('func1 is called');
      }
      
      func2 = function(){
          console.log("func2 is called");
          // Invoke func1 and pass the return value (which is undefined) to setTimeout.  
          // An alert will be displayed immediately when func1 is invoked.
          setTimeout(func1(),10000) 
      }
      
      func2 = function(){
          console.log("func2 is called");
          // Pass a reference to func1 to setTimeout to be invoked later.
          setTimeout(func1,10000) 
      }
      

      【讨论】:

        【解决方案3】:

        你也可以指定一个匿名函数:

        setTimeout(function(){func1();},10000);
        

        【讨论】:

        • 这不是必需的,保留括号也可以。并且比匿名函数更具可读性。
        • 是的,你说的都是对的,但这也是一个有效的解决方案。
        • 但在这种情况下仍然是多余的;除非您想将参数传递给函数,否则没有任何好处。
        • @sdespont +1 非常感谢..
        • @sdespont:我并不是要冒犯,在某些情况下我可能会同意你的观点,但你的回答促进了一种在代码中添加不必要的大量和低效率的不良做法。
        猜你喜欢
        • 2021-01-22
        • 2023-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-09
        • 1970-01-01
        相关资源
        最近更新 更多