JS提示 - 不要在循环中制作函数



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 。。

最新更新