考点:
for执行很快,setTimeout 回调会在遍历结束后才执行
var是全局作用域,每次访问的都是一个i(遍历中每次声明的是同一个变量),当for遍历完后,才执行setTimeout,这时i已经是3;
let是块级作用域(一个{}内),每次访问的i都会被let 赋一个新的值(遍历中每次声明的是新的变量)
for (var i = 0; i < 3; i++) {
console.log("var",i);//0 1 2
setTimeout(() =>{ console.log(i),1})//var全局作用域,访问的是for遍历后的全局下的i=3
}
for (let i = 0; i < 3; i++) {
console.log("let",i);//0 1 2
setTimeout(() => {;console.log(i)} ,1)//块级作用域,因为每个i都是重新用let赋值的,所以它log出来的就是0 1 2
}