Javascript 在循环变量中重用具有给定名称的变量?
我知道JavaScript没有比“全局”或“每个函数”更细粒度的作用域。但是写这样的东西真的有问题吗Javascript 在循环变量中重用具有给定名称的变量?,javascript,for-loop,scope,var,Javascript,For Loop,Scope,Var,我知道JavaScript没有比“全局”或“每个函数”更细粒度的作用域。但是写这样的东西真的有问题吗 function test() { for (var i = 10; i < 20; i++) { /* ... */ } for (var i = 03; i < 04; i++) { /* ... */ } } 然后,如果您的使用远离声明,您可能会忘记删除未使用的变量。或者,您可能会意外地写入全局范围,因为您认为您已经声明了一些您没有声明的内容 把var放在任何
function test() {
for (var i = 10; i < 20; i++) { /* ... */ }
for (var i = 03; i < 04; i++) { /* ... */ }
}
然后,如果您的使用远离声明,您可能会忘记删除未使用的变量。或者,您可能会意外地写入全局范围,因为您认为您已经声明了一些您没有声明的内容
把var放在任何你想成为本地人的东西上似乎是一种较小的罪恶。它是?根据多次将其重新定义为var没有效果,但这种情况比循环变量更人为。有没有真正好的理由不做上述第一种情况的事情?正如我在上面的评论中所说,
在中没有真正的风险碰到未声明的
var
,但我认为这只是口味问题,我习惯于在顶部声明所有内容,并设置“严格模式”
然而,我同意这并不能解决重置变量的问题。
我通常会有很多详细的变量名,但选择权在你,只要不损害调试过程,就只做更适合你的事情
另外,我想强调一个事实,“严格模式”
应该始终处于启用状态,这将对调试有很大帮助
编辑:如果你不熟悉
“严格模式”
,你可以有一个详细的解释这只是一个风格问题-我个人更喜欢保持“变量接近”(并使用不同的变量名称),但不同的linter和静态分析工具有自己的偏见。尽管如此,我不会在数字前面加0,除非我想要八进制;-)(var
是一个范围广泛的声明,而不是一个“已执行的语句”;由于“提升”了var
在同一个函数/程序范围内的位置,对程序的正确性没有影响。)@user2864740我最困难的部分是不断为“索引”想出一堆名称。我可能会坚持我目前的策略(你的),或者让我自己去抓住那些将声明放在首位所产生的问题。我不知道。叹息,你伤害了我。。。(注意:在本例中,我确实需要octal.:-)我不太按索引循环。。我很少在同一个函数或同一个源中使用它。我喜欢编写更小的函数,并尽可能使用函数式迭代器。此外,还有j
和k
;-)在strict mode
中,没有真正的风险碰到未声明的var
,但我认为这只是口味的问题,我习惯于在上面声明所有内容,而设置strict mode
strict mode对我来说是新的,谢谢。我时不时地修补JavaScript,因为……嗯,为了在浏览器中运行代码,我必须这么做。我个人很期待有一个JS后端,我再也不用直接用JavaScript编程了(!):-/但在此之前,谢谢你提供的信息,我现在会把它放在我所有的文件上。
function test() {
var i;
for (i = 10; i < 20; i++) { /* ... */ }
for (i = 03; i < 04; i++) { /* ... */ }
}