我对方法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');
答案 0 :(得分:2)
第一个代码段不正确。 console.log('hello')
立即运行,超时不会触发任何内容,因为在您的示例中log
是undefined
。
以下是一个工作示例:
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();