我在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 = 0
和i++
没有改进警告,JSLint只是停止处理。
答案 0 :(得分:5)
由于JSLint处于测试阶段,看起来the follow-up problem不是[只是?]。 这是因为默认情况下Crockford不再允许for
语句。看起来我需要预留一个周末到read the new instructions和source。人类圈子K正在发生奇怪的事情。
ES6最重要的新功能是正确的尾调用。这有 没有新的语法,所以JSLint没有看到它。但它使得递归更多 有吸引力的,这使得循环,尤其是循环,更少 有吸引力的。
然后在/*jslint */
指令部分的主表中:
说明:容忍
for
声明
选项:for
含义:true
如果应该允许for
语句。
表格下面还有一些解释:
JSLint不建议使用
for
语句。使用数组方法 比如forEach
。for
选项会抑制一些警告。该 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的输出:
它主要是关于范围没有被定义......等等。
这里是jslint.com的输出: 关于范围没有定义......等等和
意外&#39;为&#39;。
与
一起意外表达&#39;我&#39;在陈述中。
目前,我想您应该使用旧版本的jslint.com。