我应该如何在javascript中声明游标变量?

我应该如何在javascript中声明游标变量?,javascript,variables,scope,Javascript,Variables,Scope,正如我们所知,javascript没有块范围,因此当我编写一个for循环时,如下所示: list = [1, 2, 3, 4]; // notice about the `var` keyword for(var i = 0; i < list.length; ++i) { // Do something. } console.log(i); // shows 4 在这种形式中,游标变量i可能会声明多次,而代码本身意味着i变量可能在for块内具有作用域,但实际上并非如此 如果

正如我们所知,javascript没有
块范围
,因此当我编写一个for循环时,如下所示:

list = [1, 2, 3, 4];
// notice about the `var` keyword
for(var i = 0; i < list.length; ++i) { 
    // Do something.
}
console.log(i); // shows 4
在这种形式中,游标变量
i
可能会声明多次,而代码本身意味着
i
变量可能在for块内具有作用域,但实际上并非如此


如果不是这样:

我应该在函数的前面显式声明所有游标吗

var i, j, k; // and maybe a long list that I didn't expected?

// Maybe some other code.

for(i = 0; i < count1; ++i) {
    // do something
}

for(j = 0; j < count2; ++j) {
    // do something
}

for(k = 0; k < count3; ++k) {
    // do something
}
var i,j,k;//也许还有一长串我没想到的东西?
//也许是其他代码。
对于(i=0;i
如果我用这种方式编码,我认为代码很糟糕:声明和使用之间有很长的距离,并且在声明时不清楚它们是什么

如果我省略了所有的声明,只使用它们,这些游标变量将落入全局变量中!那太可怕了


所以我想问一个好的实践,在这种情况下如何声明游标变量


我需要你的帮助

通常最简单的方法是声明变量,然后在多个非嵌套循环中使用它

var i;

for(i = 0; i < list1.length; i++) {
    // do something.
}

for(i = 0; i < list2.length; i++) {
    // do something.
}
vari;
对于(i=0;i

在多个循环中重用
i
没有问题。一旦第二个循环开始,该值就被设置为初始值,一切正常。

声明变量会将其提升到函数顶部,后续声明在语法上是合法的,但会被忽略。因此:

var i, j, k; // and maybe a long list that I didn't expected?

// Maybe some other code.

for(i = 0; i < count1; ++i) {
// do something
}
...
var i,j,k;//也许还有一长串我没想到的东西?
//也许是其他代码。
对于(i=0;i
如果你多次声明,解释器会在引擎盖下做什么


因此,以这种方式声明它(顶部的变量)通常是人们建议的(以及JSLint建议的)。

某些JavaScript中有块作用域:@MattBall很好,但它似乎没有得到广泛支持,我在chrome调试器中没有使用它。两种方法都是一样的,这两种做法都是行之有效的。我认为由
++I
引起的问题不存在,它不是循环条件@Alex Waynet在循环的更新部分使用
++i
i++
没有区别。表达式的结果未在条件中使用。
var i, j, k; // and maybe a long list that I didn't expected?

// Maybe some other code.

for(i = 0; i < count1; ++i) {
// do something
}
...