for循环中利用计时器使用let和var

var j = 0
for(let i =0;i<2;i++,j++){
  setTimeout(function(){
      console.log(i,j);
  },1000)
}
// 0 2
// 1 2

1、因为let有自己的作用域块,所以在for循环表达式中使用let其实就等价于在代码块中使用let,每次+1都相当于i这个变量开辟了一个存储空间(共两个),而第一个计时器指向则是第一个i的存储空间

2、为什么每次j都是2,因为var是全局变量,所以循环结束后值会被覆盖掉(只有一个存储空间),而当计时器开始运作时 循环已经结束 所有计时器都指向j唯一的一个存储空间

posted @ 2021-02-22 17:01  xujing123  阅读(299)  评论(0编辑  收藏  举报