JSLint在语句位置的'意外表达'我是什么意思。'

时间:2015-05-15 17:01:44

标签: javascript jslint

我在JavaScript中有一个for循环,我已经通过JSLint运行了几次。在过去我收到the unexpected++ error,我决定重构以使我的代码更具可读性。大约一个月后,JSLint发布了更新,现在正在显示警告......

  

语句位置中出现意外表达式'i'。   for(i; i< scope.formData.tabs.length; i = i + 1){

//See JSLint.com for why I pulled out i initialization and i = i+1 instead of i++
//and http://stackoverflow.com/questions/3000276/the-unexpected-error-in-jslint
var i = 0;
for (i; i < scope.formData.tabs.length; i += 1) {
    scope.formData.tabs[i].show = false; // hide all the other tabs 

    if (scope.formData.tabs[i].title === title) {
        scope.formData.tabs[i].show = true; // show the new tab 
    }
}

还原到var i = 0i++没有改进警告,JSLint只是停止处理。

2 个答案:

答案 0 :(得分:5)

由于JSLint处于测试阶段,看起来the follow-up problem不是[只是?]。 这是因为默认情况下Crockford不再允许for语句。看起来我需要预留一个周末到read the new instructionssource。人类圈子K正在发生奇怪的事情。

  

ES6最重要的新功能是正确的尾调用。这有   没有新的语法,所以JSLint没有看到它。但它使得递归更多   有吸引力的,这使得循环,尤其是循环,更少   有吸引力的。

然后在/*jslint */指令部分的主表中:

  

说明:容忍for声明
  选项:for
  含义:true如果应该允许for语句。

表格下面还有一些解释:

  

JSLint不建议使用for语句。使用数组方法   比如forEachfor选项会抑制一些警告。该   JSLint接受的for形式受到限制,不包括新的ES6表格。

所以要在新的JSLint中创建这个lint,你需要至少这个代码(设置for指令):

/*jslint white:true, for:true */
/*global scope, title */

function test()
{
    "use strict";
    var i;

    for (i=0; i < scope.formData.tabs.length; i = i + 1) {
        scope.formData.tabs[i].show = false; // hide all the other tabs 

        if (scope.formData.tabs[i].title === title) {
            scope.formData.tabs[i].show = true; // show the new tab 
        }
    }
}

请注意,我 仍需要移动i的初始化,因此您可能仍会遇到reporting的问题。我也承认I'm with Stephen at the question you link;我不确定为什么i+= 1更好。但现在它看起来像一个艰难的要求。没有plusplus选项。

另请注意,如果代码未包含在函数中(我包含在上面的test中),您将获得Unexpected 'for' at top level.,这是一个新错误。

答案 1 :(得分:2)

编辑:好像我错了。有关更详细的解释,请参阅ruffin的答案。

似乎问题出在jslint.com上。请记住,它仍处于测试阶段。如果您使用旧版本(old.jslint.com),问题似乎就会消失。

这里是old.jslint.com的输出: enter image description here
它主要是关于范围没有被定义......等等。

这里是jslint.com的输出: enter image description here 关于范围没有定义......等等和

  

意外&#39;为&#39;。

一起
  

意外表达&#39;我&#39;在陈述中。

目前,我想您应该使用旧版本的jslint.com。