在javascript变量中只有函数作用域。所以它可以是全局的,也可以是整个函数中可访问的变量,无论在哪里声明它(在函数内)。
我猜测最佳做法是在'use strict';
之后立即在顶层声明所有变量?
如果我有5个循环,我声明相同的i
var?
for (var i = 0; i < someValue; i+=1) { ... }
变量是简单地重置为0还是循环设置它的初始值并且一切都继续进行?这会引起并发症吗?
答案 0 :(得分:2)
如您所见,i
在0
循环开始时设为for
:i = 0
。 var i
部分被提升到该函数的顶部,每增加var i …
重新声明 i
,i = 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则需要选择加入版本。