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

时间:2015-09-04 11:51:00

标签: javascript variables scope variable-declaration

在javascript变量中只有函数作用域。所以它可以是全局的,也可以是整个函数中可访问的变量,无论在哪里声明它(在函数内)。

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

如果我有5个循环,我声明相同的i var?

会发生什么
for (var i = 0; i < someValue; i+=1) { ... } 

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

1 个答案:

答案 0 :(得分:2)

如您所见,i0循环开始时设为fori = 0var i部分被提升到该函数的顶部,每增加var i … 重新声明 ii = 0部分重新定义< / em>它。重新声明是不必要的,并使代码不那么干净(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变量的范围是{{1}仅限循环块:

for

for(let i = 0; i < 20; i++){ // … } for(let i = 0; i < 10; i++){ // This is fine. // … } 变量仅适用于符合ECMAScript-6标准的浏览器,而Firefox则需要选择加入版本。