for (let i=1; i<=5; i++) {
setTimeout( function timer(){
console.log( i );
}, i*1000 );
}
以上内容适用于此代码段,但在控制台窗口中运行时,会出现意外结果。第一个值是垃圾。打印第一个垃圾值背后的原因是什么?
答案 0 :(得分:4)
在console
中打印的值是setTimeout
([timeoutID
])
当您在console
中执行代码时,第一个值始终是returned
expression
的值
在您的情况下,for循环正在迭代5
次,返回值总是递增5
,因此值将为5..10..15
,依此类推。返回setTimeout
的最新值。
在执行undefined
中的代码时,必须观察DevTools Console
,这是因为执行void-function
,如果expression
返回值,则会打印出来。< / p>
答案 1 :(得分:2)
要了解此行为,请将代码更改为:
for (let i=1; i<=5; i++) {() => 'a'}
这将记录您:
function()=&gt; &#39;一个&#39 ;;
这意味着:您看到第一个奇怪的结果,它是来自setTimeout函数的返回值。
答案 2 :(得分:2)
setTimeout函数返回一个整数id,以后可以用来取消定时器。第一个数字是setTimeout函数返回的id。
您可以运行此函数clearTimeout(id)取消计时器。