This question already has answers here:
Can I declare the same variable twice in different for loops in JavaScript? [duplicate]

(2 个回答)


5年前关闭。




在 javascript 变量中只有函数作用域。所以它要么是全局的,要么是一个可以在整个函数中访问的变量,而不管它在哪里声明(在函数内)。

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

如果我有 5 个循环声明相同的 i var,会发生什么?
for (var i = 0; i < someValue; i+=1) { ... }

变量是简单地重置为 0 还是循环设置它的初始值并且一切都在继续?这会导致并发症吗?

最佳答案

如您所见,i0 循环开始时设置为 for : i = 0var i 部分被提升到函数的顶部,每个额外的 var i … 重新声明 ii = 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 中需要选择加入版本。

关于javascript - 循环中声明的变量和重用的变量会发生什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32397373/

10-10 00:17
查看更多