var let作用域 在for循环中的setTimeout执行情况

考点:

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
}

猜你喜欢

转载自blog.csdn.net/qq_40269801/article/details/131539723
今日推荐