for循环使用setTimeout将数字打印到控制台

时间:2017-04-01 16:06:15

标签: javascript for-loop console settimeout

enter image description here我读到了关闭并找到了这段代码。

for(i=0;i<5;i++){
    setTimeout(function(){
        console.log(i);
    },2000)
}

2秒后输出5次5次。我理解这一点,但在五个出现之前,他身上有数字。当我再次执行此代码时,它会更改为其旧值增加5。它是什么?在控制台上编写代码,看看它输出的是什么,然后解释一下它是什么?

2 个答案:

答案 0 :(得分:4)

它是evaluate语句的“result”值,对于循环,它是循环体中最后一个语句的结果值,它是setTimeout调用的返回值。并that returns一个计时器ID(允许您取消超时)。

您还可以使用更简单的语句来查看此行为:

> 0;
< 0
> console.log(1);
  1  // the output of the log()
< undefined
> var i=2;
< undefined // a declaration has no result
> var i=3; i;
< 3
> for (;i<3;i++) 4;
< undefined // the body was not evaluated
> for (;i<4;i++) 5;
< 5

注意前导箭头如何表示输入和结果输出。

答案 1 :(得分:1)

That number is the intervalID
在浏览器调试器

中运行以下代码时,

代码:

setTimeout(() => console.log('hello'), 2000);

回应就像

> 1822
> hello

您可以使用该intervalID删除清除超时

只是为了向您显示该号码的确认为intervalID

> var test = setTimeout(() => console.log('hello'), 2000); test;
< 11272
  hello
> console.log(test);
  11272
< undefined