i无法解决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],
};
})
});
}
您可以将功能移到循环外,然后将其引用到map
:
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)
});
}
另外,您可以使用jshint指令来忽略循环中的功能表达式。只需将其放在所讨论的文件的顶部:
/*jshint loopfunc: true */
在循环中声明功能是凌乱的,并且可能会出现错误。而是定义一次函数,然后输入循环。
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)
});
}
人们说"在循环中声明函数的函数是混乱且可能容易出错的",但是循环中的函数是直接指示的,例如, array.prototype.foreach。方法。仅仅因为"函数"一词应该从理论上意味着在每个 foreach call 中重新定义它,这并不意味着它实际上是由JavaScript Engine 实际定义的。
外循环也是如此,因为引擎对说明进行了"懒惰"处理。他们不会重新定义整个 foreach / map /etc construct-Instructunion如果没有真正改变,他们只会向其提供新的参数。
古老的JS发动机的时代对这种简单事物以及代码背景的毫无疑问。然而,我们正在得到这种古老的警告,当功能尚未作为论点通过,例如 foreach 或 map 。。。