我总是在我的JavaScript var
循环中使用for
定义计数器变量。我最近意识到,当我在给定脚本中有多个循环时,我定义了两次相同的变量。执行以下操作是否有任何问题,或者我应该只定义i
一次?
for (var i = 0; i < var1.length; i++){
//do something with var1[i]
}
for (var i = 0; i < var2.length; i++){
//do something with var2[i]
}
答案 0 :(得分:1)
由于吊装,您的代码将起作用(尽管可能会产生无法预料的后果)。提升意味着函数中的所有声明在解释期间都被“提升”到顶部(这很好,因为JavaScript无论如何都具有函数范围)。您的代码最终被解释为:
function() {
var i;
for(i = 0; i < var1.length; i++) { }
for(i = 0; i < var1.length; i++) { }
}
所以你可以看到即使你认为你多次声明i
,两个声明都被提升到顶部并重新使用相同的变量。
只要两者独立使用,您在技术上不应该有任何问题。不幸的是,它会降低您的代码的可读性。
答案 1 :(得分:0)
变量只应在其范围内定义一次,除非在词法范围内可用。对于你的例子,你应该这样做:
var i;
for (i = 0; i < var1.length; i++){
//...
}
for (i = 0; i < var1.length; i++){
// ...
}
但这并不妨碍对该变量的更改。
如果我这样做:
var i = 0;
function A () {
i = 1;
}
A();
这会将i
更改为1
。你没有重新定义它,而是传递它并改变它的价值。这当然是一个非常简单的例子。
答案 2 :(得分:0)
宣布&amp;在每个for循环中初始化一个变量可能会给你一个小的开销(小的我的意思是非常小),我认为你不应该只转换为声明一次。
声明&amp;在每个for循环中分别初始化计数器变量更容易读取/处理,而且更容易出错(如果忘记在for循环后重置计数器变量怎么办?)。
答案 3 :(得分:-3)
变量仅包含在语句中。您不得不担心多个变量的唯一时间是嵌套语句或重新声明预先声明的变量。