微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.jb51.cc/js/154682.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐