for循环中的setTimeout在控制台窗口中运行时第一次打印意外的垃圾值

时间:2016-09-07 10:22:31

标签: javascript

for (let i=1; i<=5; i++) {
      setTimeout( function timer(){
        console.log( i );
      }, i*1000 );
    }

以上内容适用于此代码段,但在控制台窗口中运行时,会出现意外结果。第一个值是垃圾。打印第一个垃圾值背后的原因是什么?

enter image description here

3 个答案:

答案 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)取消计时器。