![]() |
1
60
由于变量声明被提升到它们出现的范围的顶部,解释器将以相同的方式有效地解释这两个版本。因此,JSHint和JSLint建议将声明从循环初始化程序中移出。 以下代码。。。
…被有效地解释为:
请注意,实际上只有一个声明
要真正回答你的问题。。。
对于如何最好地处理这个问题,有不同的意见。就我个人而言,我同意JSLint的观点,并认为当您在每个作用域的顶部一起声明所有变量时,代码会更清晰。既然这就是代码的解释方式,为什么不编写看起来像它行为的代码呢? 但是,正如您所观察到的,无论采用何种方法,代码都可以工作,因此这是一种风格/惯例的选择,您可以使用您觉得最舒服的任何形式。 |
![]() |
2
8
它只在
the comment by @TSCrowder
:如果您的环境支持它(Firefox、Node.js),那么在ES6中您可以使用
哪一个 将范围限制在for循环内 额外奖励:JSHint停止抱怨。 |
![]() |
3
6
javascript中的变量是函数范围的(而不是块范围的)。
当您定义
见下文,
|
|
4
5
JSHint显示错误的原因是,在JS中,变量作用域是函数,变量声明被提升到函数的顶部。
在Firefox中,您可以使用
这个
|
![]() |
5
4
我知道这个问题已经得到了回答,但如果你想要超级for循环,可以这样写:
这里发生了几件事。。。
最后,这只是我个人的偏好,我没有任何证据或任何性能优势。然而,我总是喜欢将变量初始化为它们将要成为的类型。
|
![]() |
6
1
最佳实践是减少变量的范围,因此为循环声明迭代变量的最佳方式是
我知道用声明的变量的范围
|
![]() |
Omar · 应为标识符,但看到的是“*”行7位置3 8 年前 |
![]() |
shankar.siva · jslint应为“]”,而看到的是“/” 9 年前 |
![]() |
theDmi · 为什么TSLint和JSLint报告空块? 9 年前 |
![]() |
TimG · 在多个for循环中使用相同的变量名是不是一种糟糕的做法? 12 年前 |