setTimeout JS继续运行

时间:2017-01-20 00:00:52

标签: javascript

我对方法setTimeout使用JS的方式感到困惑。 为什么当我调用firstFunction时setTimeout只运行一次AND当我调用secondFunction时它继续调用函数。

我希望能保持一致性。 firstFunction,setTimeout将继续调用log函数或在secondFunction中setTimeout只调用secondFunction一次并完成。

var firstFunction = function(){
    var log = console.log('hello')
    setTimeout(log, 2000);
}

firstFunction();

var secondFunction = function(str){
    console.log(str)
    setTimeout("secondFunction('test')", 2000);
}

secondFunction('test');

1 个答案:

答案 0 :(得分:2)

第一个代码段不正确。 console.log('hello')立即运行,超时不会触发任何内容,因为在您的示例中logundefined

以下是一个工作示例:



var firstFunction = function(){
    var log = function() { console.log('hello'); };
    setTimeout(log, 2000);
}

firstFunction();




第二个片段永远循环,因为您告诉它执行以下操作:

1)运行语句secondFunction('test')

2)记录参数并设置超时2秒。

3)一旦超时结束,运行语句secondFunction('test')

4)记录参数并设置超时2秒。

5)超时结束后,运行语句secondFunction('test')

...

n)永远重复



var secondFunction = function(str){
    console.log(str)
    setTimeout("secondFunction('test')", 2000);
}

secondFunction('test');




请注意,在第一个示例中,超时不会再次调用firstFunction,它会调用名为log的函数,而log不会创建另一个超时回调,因此它只会运行一次。

**编辑 - 如何调用它而不是使用字符串作为函数参数? **

用字符串调用它可能不太可取。使用对函数的引用来调用它。这在第一个示例中进行了演示,其中声明了函数log并将其传递给setTimeout。但你也可以这样做:



var thirdFunction = function(){
    setTimeout(function() { console.log('Hello World'); }, 1000);
}

thirdFunction();