JS提示 - 不要在一个循环中做功能(JS Hint - don't make functi

2019-07-02 16:28发布

我不能让周围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],
            };
        })
    });
}

Answer 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 */


Answer 2:

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

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


Answer 3:

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

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

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



文章来源: JS Hint - don't make functions within a loop