JS提示 - 不要在一个循环中做功能

问题描述 投票:53回答:3

我不能让周围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],
            };
        })
    });
}
javascript jshint
3个回答
110
投票

你可以只移动功能外循环和传递的引用来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 */

6
投票

声明在一个循环的功能是凌乱的,并有可能容易出错。取而代之的是,该功能一次,然后进入循环。

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)
             });
}

0
投票

有人说“声明在一个循环的功能是凌乱和容易出错的”,但在循环中功能的直接什么指示中,例如,Array.prototype.forEach方法。仅仅因为这个词“功能”理论上应该意味着重新定义它在每一个的forEach调用它并不意味着它实际上是由JavaScript引擎每次定义。

这同样适用于外循环,因为发动机有指令“懒”的处理。他们不打算再重新定义了整个的forEach /地图/等构建指令,如果没有真正的改变它,他们将只给新的论据吧。

这毫无头绪这么简单的事情,以及代码方面的古JS引擎的时代早已过去。然而,我们正在这个古老的警告功能时尚未能够作为参数在的forEach或地图的情况下传递其被设想。

© www.soinside.com 2019 - 2024. All rights reserved.