Javascript Jslint抱怨在数组上迭代

Javascript Jslint抱怨在数组上迭代,javascript,jslint,Javascript,Jslint,为什么jslint会对此抱怨 for (var i = 0; i < array.length; i ++) { console.log(array[i]); } 对我来说,在比必要范围更广的范围内声明变量是没有意义的(对于块来说,是否每个块都有自己的sope btw?) 这里怎么了?如果这只是jslint的一时兴起,是否有可能让它以某种方式仅忽略此特定情况?Javascript没有块作用域,因此: function foo() { // some code fo

为什么jslint会对此抱怨

for (var i = 0; i < array.length; i ++) {
    console.log(array[i]);
}
对我来说,在比必要范围更广的范围内声明变量是没有意义的(对于块来说,是否每个块都有自己的sope btw?)


这里怎么了?如果这只是jslint的一时兴起,是否有可能让它以某种方式仅忽略此特定情况?

Javascript没有块作用域,因此:

function foo() {

   // some code

   for (var i = 0; i < a.length etc
函数foo(){
//一些代码
对于(变量i=0;i
同:

function foo() {

   var i;

   // some code

   for (i = 0; i < a.length etc
函数foo(){
var i;
//一些代码
对于(i=0;i
JSLint认为您可能不知道JS的作用域规则,并建议您根据解释器的实际工作方式重新构造源代码——也就是说,使用第二个选项

我个人从不这样做,因为断章取义的声明严重降低了可读性:

function foo() {

   var i; // what the heck is this for?

   // some code
   // more code
   // even more code

   for (i = 0; i < a.length // where the heck does this come from?
函数foo(){
var i;//这到底是干什么用的?
//一些代码
//更多代码
//甚至更多的代码
对于(i=0;i

讨论了这种方法的优缺点。

for
循环的
没有自己的作用域,只有函数有。JavaScript中没有块作用域,只有词法作用域。下面是一些相关阅读:。我确信JSHint建议了这一点,因为从技术上讲,
I
的声明被提升到作用域的顶部。您可以d关于这一点:@Ian There is
let
@simonzack你是对的。不幸的是,这是在ES6中,并且在许多浏览器中不受支持。欢迎你评论/回答并解释更多。当JSLint无法识别它时,这并没有真正的帮助。特别的警告可能是人们离开JSLint的最常被引用的原因o其他类似JSHint的东西,出于您所述的原因。
function foo() {

   var i; // what the heck is this for?

   // some code
   // more code
   // even more code

   for (i = 0; i < a.length // where the heck does this come from?