尝试重写for循环,得到jslint错误

Posted

技术标签:

【中文标题】尝试重写for循环,得到jslint错误【英文标题】:Trying to rewrite for loop, get jslint error 【发布时间】:2017-11-18 04:01:11 【问题描述】:

我正在尝试组合各种代码,所以我想提前声明i 的开始。

var i,
  max_i = 4;


for (i = 2; i<= max_i; i += 1)  

  //things

var i = 2,
  max_i = 4;


for (; i<= max_i; i += 1)  

  //things

问题是我在 JSLint 中遇到了各种错误

应为“)”,但看到的是“ 预期为“;”而是看到了“i”。 预期为“”,而实际看到的是“max_i”。

代码在两种情况下都能正常执行。

【问题讨论】:

什么版本的 jshint?我没有看到报告的这些错误 版本 1.0.4,使用 netbeans(最新) 【参考方案1】:
for (i; i<= max_i; i += 1)  

  //things

【讨论】:

【参考方案2】:

JSLint 帮助您编写更好的代码,相信它,它与品味无关。

它抱怨是因为不初始化 for() 被认为是丑陋的(不好的风格)。

你应该像往常一样初始化它。我也会尽量不定义变量而是声明它们,然后如下所示初始化它们。我现在也会使用"use strict"。不这样做有点不愉快。外层函数是为了避免全局和非函数范围的代码:

/*jslint for */

(function () 
    "use strict";
    var i;
    var max_i;

    max_i = 4;
    for (i = 2; i <= max_i; i += 1)
    
      // things
    
());

【讨论】:

我一直在使用“use strict”,如果我不使用它会抱怨:) 啊,好吧 :) 我在 sn-p 中没有看到它。【参考方案3】:

您可以预先声明和初始化i,但您仍必须在循环配置中将其设置为循环变量。而且,如果你在循环配置中初始化它会更清楚,而不是在上面,因为调试会更容易。

var i , max_i = 4;

for (i = 2; i <= max_i; i++) 
  //things

此外,最好始终将左大括号 () 与其定义的语句放在同一行,因为在 javascript 中存在某些情况,将其放在下一行可能会导致错误由于自动插入分号的代码。

最后,要将值加一,您可以使用 ++ unaray 运算符,而不是 +=1

【讨论】:

1.我认为这只是编码风格的问题。我更喜欢他们排队。从来没有问题。 2.如果我使用++操作符jslint报错,所以我改成了i+=1。 “但你仍然必须在循环配置中将它设置为循环变量”为什么必须var i = 0; for(;;) console.log(i++); if(i&gt; 1) break; @AllisonC 正如我在回答中所说,这是一个常见的误解,认为这只是编码风格的偏好。在适当的情况下,这种风格可能会导致代码中出现实际错误。 @YuryTarabanko 因为您的示例只不过是一个while 循环。要正确使用 for 循环,您需要将其设置为正常工作。 @AllisonC [叹气] 抱歉,根据您的经验,您还没有了解到这一重要而真实的事实。根据我的经验,我从来没有在滑雪时摔断过腿。再说一次,我从来没有滑雪过。尽管如此,它还是存在的:***.com/questions/3641519/…

以上是关于尝试重写for循环,得到jslint错误的主要内容,如果未能解决你的问题,请参考以下文章

带有闭包的 JavaScript For 循环导致 JSLint 警告

关于 JSLint,它不喜欢 for 循环,以及尾调用优化

JSlint - 在 for 循环中生成函数与评估函数

在 JavaScript (JSLint) 中的 for 循环之外引用“this”元素

jslint - 不要在循环中创建函数

需要一个标识符,而是看到 ')' 循环 jslint