JavaScript循环中重复使用“i”的方法

4

我最近开始使用 PHP Storm (非常喜欢它)并发现它会将 JavaScript 中的 "var i" 的声明标记为重复。我了解到这个变量的作用域超出了循环。

for (var i = 0; i < 10; i++) {
    // Do anything
}
console.log(i); // i == 10

当我进行下一次循环时,我是否需要再次声明变量i?还是说只需要说i = 0就可以了?我知道我可以这么做,但其中一个似乎是不好的风格,另一个则像是不良实现。一方面,你不应该重新声明一个已经在作用域中的变量,但如果我删除第一个声明“i”的循环,那么其余所有内容都会出现问题。

1
只需将i = 0设置一次即可,无需重新声明变量。 - Bud Damyanov
2个回答

4

JavaScript 只有函数级作用域,没有块级作用域。因此,如果一个变量在函数内的任何地方声明,它将在整个函数中可用。所以你不必再次声明它。

最佳实践是在函数开头声明函数中使用的所有变量。

例如:

function myFunction() {
    console.log(i);
    for (var i = 0; i < 10; i++);
    console.log(i);
}

myFunction();

将会打印出:

undefined
10

i 在函数中被声明,但在执行 for 循环之前,i 没有被赋任何值。因此,它将具有默认值 undefined


此外,所有声明为函数参数的变量具有与局部声明变量完全相同的作用域。这可能对初学者来说显而易见,但对于初学者来说可能并不那么明显。 - MaxArt
我明白了。我的问题更多是关于风格的。例如,如果我创建一个for循环并声明i,然后在后面的for循环中不声明i,但删除第一个for循环,那么什么都不会再起作用了。话虽如此,反复重新声明一个在范围内的变量感觉不太对。 - Captain Stack
@CaptainStack 我建议你在对代码进行更改时,通过 jslint 或 jshint 运行你的代码。 - thefourtheye

1

你不需要再声明它。你可以像这样为下一个循环重新分配i的值:

              for (i = 0; i < 5; i++)
                {
             // Do anything
                  }

我知道我不需要这样做,但如果我删除前面的循环,后面的循环将会出错。考虑到i只存在于循环的范围内,重新声明它似乎更好,但是每次重新声明一个在范围内的变量似乎也是不正确的。 - Captain Stack
是的,但也请注意一点,不必在使用javascript变量之前声明它。即使您没有在之前声明“var i”,也可以使用“i”。 - Sarath Kn
有趣。那么 var 关键字到底是用来做什么的? - Captain Stack
@CaptainStack var 用于声明非全局变量。如果在当前函数中未声明 x,则 var x = 0 将创建一个新的局部变量,而 x = 0 则设置 x 的全局值,必要时创建一个新变量。最佳实践是将变量设为局部变量(使用 var),除非它们需要成为全局变量。 - Gordon Gustafson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接