javaScript for 循环中使用 let 和 var

var 声明

for(var i = 0; i<5; i++){
  setTimeout(()=>console.log(i),0)    // 5 5 5 5 5
}

上面的代码因为setTimeout是一个异步,所以它拿到的是循环结束后的i的值,
因为上面我们说的var是全局变量会被覆盖掉所以最后的i值是5,而且一共循环了5次(0-4),所以会打印五个5。

 

let 声明

for(let i = 0; i<5; i++){
  setTimeout(()=>console.log(i),0)     //0 1 2 3 4
}

 上面的代码,因为在for循环中使用了let声明循环变量,

 所以每一个值都会存在于单独的作用域不会被覆盖掉,因此,循环结束后得到的值是0,1,2,3,4

 

因为let有自己的作用域块,所以在for循环表达式中使用let其实就等价于在代码块中使用let

 

posted @ 2021-07-22 15:37  刘小灿  阅读(698)  评论(1)    收藏  举报