Javascript JS-Hint-don';t在循环中生成函数

Javascript JS-Hint-don';t在循环中生成函数,javascript,jshint,Javascript,Jshint,我无法绕过JSHint的错误消息。以下是我正在使用的循环: for (i = 0; i < Collection.length; i += 4) { data.push({ items : Collection.slice(i, i + 4).map(function(item) { return { id: item[0], title: item[1],

我无法绕过JSHint的错误消息。以下是我正在使用的循环:

for (i = 0; i < Collection.length; i += 4) {
    data.push({
        items : Collection.slice(i, i + 4).map(function(item) {
            return {
                id: item[0],
                title: item[1],
            };
        })
    });
}
for(i=0;i
您只需将函数移到循环外,并将其引用传递到
映射中即可:

function mapCallback(item) {
    return {
        id : item[0],
        title : item[1],
    };
}
for (i = 0; i < Collection.length; i += 4) {
    data.push({
        items: Collection.slice(i, i + 4).map(mapCallback)
    });
}

在循环中声明函数是混乱的,并且可能容易出错。相反,只需定义一次函数,然后进入循环

var objMaker = function(item) {
    return {
        id : item[0],
        title : item[1],
    };
};

for (i = 0; i < Collection.length; i += 4) {
    data.push({
                  items : Collection.slice(i, i + 4).map(objMaker)
             });
}
var objMaker=函数(项){
返回{
id:项[0],
标题:项目[1],
};
};
对于(i=0;i
人们说“在循环中声明函数是混乱的,而且可能容易出错”,但循环中的函数是直接在方法中指示的。仅仅因为“函数”一词在理论上应该意味着在每次forEach调用中重新定义它,并不意味着它实际上每次都是由Javascript引擎定义的

外部循环也是如此,因为引擎具有指令的“惰性”处理。他们不会重新定义整个forEach/Map/etc构造指令,如果它没有任何改变,他们只会给它提供新的参数


古代JS引擎对这些简单的事情以及代码上下文一无所知的时代早已过去。然而,我们得到了这个古老的警告,它是在函数还不能像forEach或Map那样作为参数传递时构思出来的。

对不起,我已经编辑了我的代码。。。我忘了粘贴循环部分。你会遇到哪种错误?不要在JSHint@OhadSchneider你的链接404's@Kev@Skyrim1发出警告的原因是为了避免在异步回调(onclick或ajax)中使用
i
时经常遇到的错误。您在这里很安全,您可以使用James的建议告诉jshint保持安静。如果有人碰巧使用Sublime文本和SublimeLiner,您可以在Package Settings->SublimeLiner->User-Settings中使用“jshint_选项”更改此设置:{“loopfunc”:true}如果您使用
/*jshint禁用警告*/注释,最安全的做法是将注释保留在循环块内,而不是文件顶部。这样,您就不会意外地将将来的问题隐藏在文件的其他部分。/*jshint loopfunc:true*/无效:/@moala,我将
/*jshint loopfunc:true*/
作为
for
循环的
中的第一行,警告消失了。一些注释可能有助于OP更好地理解“混乱且可能容易出错”没有解释在何种情况下可能发生的情况。
var objMaker = function(item) {
    return {
        id : item[0],
        title : item[1],
    };
};

for (i = 0; i < Collection.length; i += 4) {
    data.push({
                  items : Collection.slice(i, i + 4).map(objMaker)
             });
}