从本文档中,我了解到setTimeout
返回计时器的 ID 值。
但是当我运行这段代码时:
for (var i = 1; i <= 5; i++) {
setTimeout(function() { console.log('hello'); }, 100);
}
我在控制台选项卡中得到以下信息:
即它打印了一次计时器 ID,然后是 5 个连续的 'hello' 实例。
输出不应该有 timerID, hello, timerID, hello, .... 吗?
为什么setTimeout
即使它在循环中也只打印一次它的ID?
您所看到的是Javascript 控制台的REPL(读取-评估-打印循环)特性。
您希望看到setTimeout()
循环每次迭代的所有调用的结果。但是,在完成一组语句后,JS控制台只打印出最近执行的语句的返回值。
此行为的简单显示:
注意:在这些示例中,我描述的是 JS 控制台输入/输出,而不是包括可执行代码块,因为所讨论的行为特定于以交互方式使用控制台。
> x = 4;
<- 4
> y = 5;
<- 5
> x; y;
<- 5
最后一条命令有两条语句,只打印最后一条的值。
如果你想打印出每个setTimeout()
调用的 id ,你只需要明确地执行日志记录操作:
> for (var i = 1; i <= 5; i++) {
console.log(setTimeout(function() { console.log('hello'); }, 100));
}
596
597
598
599
600
<- undefined
5 hello
上面你看到:
console.log(setTimeout(...))
语句的 5 个输出undefined
最后一条console.log(setTimeout(...))
语句的返回值console.log('hello')
语句的分组输出本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句