javascript – JSHint不会让我在’for’循环中使用’forEach’

前端之家收集整理的这篇文章主要介绍了javascript – JSHint不会让我在’for’循环中使用’forEach’前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个数组作为值的对象.
people = {
    'steve':['foo','bar'],'joe':['baz','boo']
}

对于每个键,我想循环相应数组中的值.足够简单:

for ( var person in people ) {
    person.forEach( function(item) {
      console.log(item)
    })
}

但JSHint抱怨说:

Don't make functions within a loop.

这是我的代码真的有问题吗?我很喜欢短的ES5 for循环语法.我需要使用ES3风格或以其他方式更改代码吗?

解决方法

那里有两个问题,即JSHint警告你的问题,还有一个更为根本的问题.

JSHint警告你的是在理论上,每次循环运行时,都会创建一个新的功能.这会更好:

for ( var person in people ) {
    person.forEach(handlePerson);
}
function handlePerson(item) {
  console.log(item)
}

我在理论上说“因为虽然规范要求每次都创建一个新的函数对象,但这并不意味着引擎不能重用函数的底层实现,并不意味着引擎不能重用如果您没有为其分配任何其他属性或保留对其的引用,那么该函数对象也是一样的. I asked the V8 guys about it(V8是Chrome中的JavaScript引擎),他们表示Chrome将“…在大多数情况下…”重新使用源代码中同一点创建的不同功能对象的底层函数实现,他们会“期望”大多数其他引擎都会这样做.

所以JSHint可能在这种特殊情况下有点过高.但是,这通常是一个有用的警告,特别是如果您在循环中创建的函数是指在循环中内容变化的变量,这是人们经常关闭错误.

但更基本的是,人是一个String(它是人的一个属性名称),而String不具有forEach.你自找的:

for ( var person in people ) {
    people[person].forEach(handlePerson);
}
function handlePerson(item) {
  console.log(item)
}

…例如,人[人]获取该键的数组.

原文链接:https://www.f2er.com/js/154682.html

猜你在找的JavaScript相关文章