在循环中声明的变量和重用的变量会发生什么

What happens to variables declared in loops and the re-used

本文关键字:变量 什么 循环 声明      更新时间:2023-09-26

在javascript变量只有函数作用域。因此,它要么是全局变量,要么是在整个函数中可访问的变量,而不管声明的位置(在函数中)。

我猜最佳实践是在'use strict';之后的顶层声明所有变量?

如果我有5个循环,我声明相同的i var会发生什么?

for (var i = 0; i < someValue; i+=1) { ... } 

变量只是重置为0或任何循环设置它的初始值,一切继续?这会引起并发症吗?

可以看到,在for循环开始时,i被设置为0: i = 0var i部分被提升到函数的顶部,每个额外的var i … 重新声明 i, i = 0部分重新定义它。重新声明是不必要的,并且会使代码不那么干净(JSHint会警告你这一点)。

如果以后在任何循环之外使用i,则将i设置为for循环对其所做的操作。

for(var i = 0; i < 4; i++){
  /*
  As the last few steps i is incremented (i == 4),
  then it is checked with (i < 4), which is false; the loop is done.
  */
  //…
}
i; // 4

因为你通常会在循环的开头重新定义每个迭代变量,所以这不会导致任何其他问题。

然而,为了更简洁的代码,明智的做法是每个循环使用一个变量,或者使用let变量,而不是var变量,因为let变量的作用域仅为for循环块:

for(let i = 0; i < 20; i++){
  // …
}
for(let i = 0; i < 10; i++){ // This is fine.
  // …
}

let变量仅在兼容ecmascript -6的浏览器中可用,并且在Firefox中需要版本选择。