在循环变量中重用具有给定名称的VAR?

时间:2014-02-02 03:33:55

标签: javascript for-loop scope var

我知道JavaScript没有比“全局”或“每个功能”更精细的范围。但写下这样的东西是否有任何实际问题:

function test() {
    for (var i = 10; i < 20; i++) { /* ... */ }
    for (var i = 03; i < 04; i++) { /* ... */ }
}

不得不继续为索引变量提出新名称(这就是我一直在做的事情:fooIndexbarIndex等等,这很烦人。)并将声明移到顶部功能也不是很好:

function test() {
    var i;
    for (i = 10; i < 20; i++) { /* ... */ }
    for (i = 03; i < 04; i++) { /* ... */ }
}

然后,如果您的使用远离声明,您可能会忘记删除未使用的变量。或者您可能会意外地写入全局范围,因为您认为已经使用var声明了一些您​​没有声明的内容。

将var放在你打算成为本地的任何东西上似乎是一个较小的邪恶。是吗?根据{{​​3}}重新定义它作为var不止一次没有效果,但这种情况比循环变量更人为。有没有一个真正的理由不去做上面第一个案例?

1 个答案:

答案 0 :(得分:3)

正如我在上面的评论中所述, 在strict mode中没有真正有可能触及未申报var的风险,但我认为这只是一个品味问题,我习惯于将所有内容都声明,并设置"strict mode"。< / p>

但是,我同意它不能解决重置变量的问题。 我通常更喜欢随后的一些冗长的变量名称,但是只要它不会损害你的调试过程,你的选择就是你自己,只做更适合你的事情。

另外,我想坚持这样一个事实,即"strict mode"应始终开启,它对你的调试有很大的帮助。

编辑:如果您不熟悉"strict mode",可以获得详细解释here on mdn