【问题标题】:Trying to rewrite for loop, get jslint error尝试重写for循环,得到jslint错误
【发布时间】: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(最新)

标签: javascript for-loop jslint


【解决方案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 [叹气] 抱歉,根据您的经验,您还没有了解到这一重要而真实的事实。根据我的经验,我从来没有在滑雪时摔断过腿。再说一次,我从来没有滑雪过。尽管如此,它还是存在的:stackoverflow.com/questions/3641519/…
    猜你喜欢
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 2020-04-26
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 2023-03-05
    相关资源
    最近更新 更多