关于for循环的问题。

   为什么呢?
    for (var i = 0; i < 10; i++) {
           setTimeout('console.log(i)',100);
      }; //输出10 
      for (var i = 0; i < 10; i++) {
         console.log(i)
      }; //输出9
      
      在看let和var的例子的时候,
  var a = [];
  for (var i = 0; i < 10; i++) {
      a[i] = function () {
     console.log(i);
  };
  console.log(i)
}//i到最后也是10.
阅读 1.6k
2 个回答

第一个for循环,执行完毕的时候,i是10这个没异议吧,但是这个时候定时器里的函数还没执行,等100毫秒过去,打印的就是10个10,第二个for 循环,只有i小于10的时候才打印,所以打印的是0到9

因为 setTimeout 是异步执行的,当这个方法执行的时候, i 都已经是10了。

可以使用闭包来防止变量污染。

for (var i = 0; i < 10; i++) {
  (function(i) {
    setTimeout(function() {
      console.log(i)
    }, 100);
  })(i);
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题