javascript - 在多个 for 循环中使用相同的变量名是不好的做法吗?

标签 javascript for-loop jslint jshint

我只是使用 JSHint 检测了一些 JavaScript 代码。在代码中我有两个 for 循环都是这样使用的:

for (var i = 0; i < somevalue; i++) { ... }

因此两个 for 循环都使用 var i 进行迭代。

现在 JSHint 向我显示第二个 for 循环的错误:“'i' 已定义”。我不能说这不是真的(因为它显然是)但我一直认为这无关紧要,因为 var i 只在那个特定的地方使用。

以这种方式使用 for 循环是不好的做法吗?我是否应该为代码中的每个 for 循环使用不同的变量,例如

//for-loop 1
for (var i = 0; ...; i++) { ... }

//for-loop 2
for (var j = 0; ...; j++) { ... }

或者这是我可以忽略的错误之一(因为它不会破坏我的代码,它仍然会执行它应该执行的操作)?

JSLint 顺便说一句。在第一个 for 循环停止验证,因为我没有在函数顶部定义 var i(这就是我首先切换到 JSHint 的原因)。所以根据这个问题中的例子:Should I use JSLint or JSHint JavaScript validation? – 无论如何我应该使用这样的 for 循环来确认 JSLint:

...
var i;
...
//for-loop 1
for (i = 0; ...; i++) { ... }
...
//for-loop 2
for (i = 0; ...; i++) { ... }

这对我来说也不错,因为这样我应该避免 JSLint 和 JSHint 中的错误。但我不确定的是,我是否应该像这样为每个 for 循环使用不同的变量:

...
var i, j;
...
//for-loop 1
for (i = 0; ...; i++) { ... }
//for-loop 2
for (j = 0; ...; j++) { ... }

那么对此是否有最佳实践,或者我可以只使用上面的任何代码,这意味着我选择“我的”最佳实践?

最佳答案

由于变量声明被提升到它们出现的范围的顶部,解释器将以相同的方式有效地解释两个版本。出于这个原因,JSHint 和 JSLint 建议将声明移出循环初始化程序。

下面的代码...

for (var i = 0; i < 10; i++) {}
for (var i = 5; i < 15; i++) {}

...有效地解释为:

var i;
for (i = 0; i < 10; i++) {}
for (i = 5; i < 15; i++) {}

请注意,实际上只有一个 i 声明,以及对它的多个赋值 - 您不能真正“重新声明”同一范围内的变量。

实际回答你的问题......

is there a best practice for this or could I just go with any of the codes above?

对于如何最好地处理这个问题有不同的看法。就个人而言,我同意 JSLint 并认为当您在每个范围的顶部一起声明所有变量时,代码会更清晰。既然这就是代码的解释方式,为什么不编写看起来和它的行为一样的代码呢?

但是,正如您所观察到的,无论采用何种方法,代码都可以正常工作,因此这是一种样式/约定选择,您可以使用您觉得最舒服的任何形式。

关于javascript - 在多个 for 循环中使用相同的变量名是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15783144/

相关文章:

javascript - JavaScript 对象创建之间的区别

Python:避免使用多个嵌套的 for 循环来迭代字符串

vb.net 逐行读取文件并复制该行的某些部分

javascript - Adobe Brackets 禁用 jslint 但允许 jshint

javascript - JS Lint : Unexpected dangling '_' in '_fnGetTrNodes'

javascript - 使用laravel和vuejs从数据库获取数据

javascript - 找不到模块 '../../images/Logo.png' .ts(2307) 红色错误仍然显示

c++ - 如何用STL算法代替for循环?

javascript - JSLint 代码质量工具

javascript - 想要使用 javascript 显示和隐藏下拉菜单