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唯一的一个存储空间