Javascript JSLint:意外';对于';。意外';var';

Javascript JSLint:意外';对于';。意外';var';,javascript,arrays,for-loop,jslint,Javascript,Arrays,For Loop,Jslint,我在StackOverflow中搜索并尝试其他建议。 不幸的是,这些答案对我不起作用。他们建议用“foreach”而不是“for”,但我怎么能。。。如果我只想迭代50次?:

我在StackOverflow中搜索并尝试其他建议。 不幸的是,这些答案对我不起作用。他们建议用“foreach”而不是“for”,但我怎么能。。。如果我只想迭代50次?:<

好吧,我会把代码贴上去,看看有没有好人能帮我

他无法完成


意外的“为”。对于(var i=1;ijslint过于热心(有些人会说),它期望所有
var
语句都位于函数的顶部

通过在声明变量的行上方添加指令注释,可以告诉jslint您不关心该规则

// Llenamos el campo de 50 humanos/maquinas/extraterrestres = 150 jugadores
/*jslint for:true */
for (var i=1;i<=50;i+=1){
//Llenamos el campo de 50 humanos/maquinas/Exterterterrestres=150个jugadores
/*jslint for:true*/

for(var i=1;i当您选择容忍
for
时,它警告您的下一件事是
var i
的全局声明。由于您在顶层有for循环,
i
在程序中的任何地方都可用

我会容忍
for
并将其包装为一个iLife。这样,
I
只在这个函数中可用,不会泄漏到全局范围

(function() {
    var i = 0;
    for (i=1;i<=50;i+=1) {
        campo.push(new Human("h"+i));
        campo.push(new Machine("m"+i));
        campo.push(new Alien("e"+i));
    }
})();

这只是Crockford的愚蠢,再次告诉你,永远不应该使用
for
循环。我会忽略它。这个问题表明有一个选项可以忽略这个警告“容忍”。是的,忽略它应该是最好的…但我只想真正了解如何处理这个问题。我知道有很多线程使用它s“for”问题,但没有人为我工作。无论如何谢谢你!@miltonb是的,(我在底部编辑了它),我试图检查JSLint中的“容忍声明”警告,但它仍然给我警告。我把代码放在第一行,但什么也没做。所以我尝试了另一种解决方案,我移动了for(var=i…,并声明var=i;在顶部。但现在它的意思是:在顶层出现意外的“for”。for(i=1;i@JoseSerodio不是在第一行,你在循环的正上方添加了注释,太棒了。非常感谢。还有其他解决方案吗?这会让代码有点混乱:-)我知道也许我要求太多了!这个函数是专门为你的代码设计的。没有什么能阻止你创建一个函数
repeat()
它接受一个函数和次数,并按给定次数调用该函数。lodash实际上就是这样做的:此外,还有很多其他使用JavaScript的人可能会有更地道或更好的东西-勾选标记通常不鼓励更多的答案。如果在几次之后(很少?)天,这仍然是您的最佳解决方案,那么它可能是合适的。太好了。我会检查这个库,再次感谢您的帮助。或者,如果您愿意,您可以将所有代码推到一个闭包中,并立即调用函数。这有点难看,但是jQuery文档已经准备好了,而且并不准确反模式。我开始怀疑是否默认情况下我不应该这样做,这正是jdphenix建议的原因——因此您保证不会污染全局范围。
(function() {
    var i = 0;
    for (i=1;i<=50;i+=1) {
        campo.push(new Human("h"+i));
        campo.push(new Machine("m"+i));
        campo.push(new Alien("e"+i));
    }
})();
function repeat(fn, n) {
  var i = 0;
  for (;i < n; i += 1) {
    fn();
  }
}
function initialize() { 
    campo.push(new Human("h"+i));
    campo.push(new Machine("m"+i));
    campo.push(new Alien("e"+i));
}

// then later
repeat(initialize, 50);