2

我有两个功能,如下所示,

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

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

当我打电话时func2()。我得到了输出,但没有得到预期的输出。如您所见,我使用了setTimeout()in并且我希望在执行func2之前指定一些延迟。func1

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

4

3 回答 3

9

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

setTimeout(func1,10000);
于 2013-03-29T09:04:00.003 回答
3

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

setTimeout函数需要一个函数引用

您的代码在打印警报后将调用 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) 
}
于 2013-03-29T09:04:23.477 回答
2

您还可以指定一个匿名函数:

setTimeout(function(){func1();},10000);
于 2013-03-29T09:05:22.310 回答