JSHint向我抱怨,因为我正在使用for(o in ...)
循环一个对象,然后在里面使用o.somearray.forEach(function(){...});
。它是说不在循环中创建函数,但在这种情况下甚至是否重要?它看起来更好一点,因为线条较少而且看起来(略微)更好,但它有什么重大影响吗?
使用正常的for循环并迭代数组是否更好,或者创建函数并使用ECMA 5版本是否正常?
我正在做这样的事情:
for(var i in data) {
data[i].arr.forEach(function(...) {
// do magic
});
}
答案 0 :(得分:3)
使用forEach
很好,这里建议的是你传递给forEach
的函数应该在循环之外创建,如下所示:
var doMagic = function(...) {
// do magic
};
for (var i in data) {
data[i].arr.forEach(doMagic);
}
不鼓励在循环中创建函数,因为它效率低,JavaScript解释器将在每次循环迭代中创建函数的实例。其他详细信息在JSLint Error Explanations: Don't make functions within a loop。
中提供答案 1 :(得分:1)
是的,嵌套构造很好。每个循环创建一个“新”函数也没关系。和,
在相同执行上下文中创建许多“新”函数时的性能差异是一个实现细节;但它不本来就慢。(见jsperf test case 1 )
即使在“新”情况下创建 new 函数对象,每个循环也会创建相同个执行上下文 - 即当前执行上下文并且当调用该函数时。更智能的JavaScript实现可以轻而易举地利用这一点;或者他们可能没有。
在这种特殊情况下,我更喜欢内联方法。
1 当然测试特定的 JavaScript实现;