好奇地逐步了解涉及let和var

时间:2019-04-21 07:24:41

标签: javascript ecmascript-6 var let

我有两个关于for循环的简单代码片段,分别涉及let和var。 第一个代码具有用let声明的变量

 for (let i = 0; i < 10; i++) {
       setTimeout(function() {
          console.log(i);
       }, 1000);
    }

所以它会这样显示o / p

0123456789 

但是如果我用这样的var替换let

 for (var i = 0; i < 10; i++) {
       setTimeout(function() {
          console.log(i);
       }, 1000);
    }
it will print 10 for ten times. 

我知道这与函数级作用域和块级作用域有关,但是想清楚地逐步了解执行过程。

谢谢。

1 个答案:

答案 0 :(得分:2)

仅打印9的原因是在循环完成后执行了回调函数。这意味着i为9。

您可以:

如果尝试在1秒后打印1-10,则可以循环使用回调函数。喜欢:

setTimeout(function() {
  for (var i = 0; i < 10; i++) {       //Put the loop inside the setTimeout db function.
    console.log(i);
  }
}, 1000);

如果您尝试每隔一秒打印一次,则可以将i作为第三个参数传递给setTimeout

for (var i = 0; i < 10; i++) {
  setTimeout(function(o) {           //Receive it on variale o
    console.log(o);
  }, 1000 * i, i);                   //Pass the i as third parameter
}

文档:setTimeout