JSHint 不允许我在“for”循环中使用“forEach”

2024-01-05

我有一个以数组作为值的对象。

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

我说“理论上”是因为尽管规范要求新功能object每次都会创建,这并不意味着引擎不能重用底层执行函数的属性,这并不意味着如果您没有为其分配任何其他属性或保留对它的引用,引擎就无法重用同一函数对象。我向 V8 的人询问了此事 https://stackoverflow.com/a/10160351/157247(V8 是 Chrome 中的 JavaScript 引擎),他们表示 Chrome 将“......在大多数情况下......”重用源代码中同一点创建的不同函数对象的底层函数实现,并且他们会“期望”大多数其他引擎也会这样做。

因此,在这种特殊情况下,JSHint 可能有点过头了。但这通常是一个有用的警告,特别是当您在循环内创建的函数引用其内容在循环期间发生变化的变量时,这是人们犯的经典闭包错误。

但更根本的是,person is a String(这是一个属性的名称people), and String没有forEach。你自找的:

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

...例如。,people[person]获取该键的数组。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JSHint 不允许我在“for”循环中使用“forEach” 的相关文章

随机推荐

  • 带有文件内容的.Net资源使docker构建失败

    dotnet build 构建一个没有错误的项目 同时 docker build 给出以下错误 src Audit Worker Example Resources resx error MSB3103 Invalid Resx file
  • Ntext 和 Image 数据类型不能在 WHERE、HAVING、GROUP BY、ON 或 IN 子句中使用

    我收到错误 ntext 和 image 数据类型不能 用于 WHERE HAVING GROUP BY ON 或 IN 子句 除非这些 数据类型与 LIKE 或 IS NULL 谓词 同时尝试 将更改保存到 SQLCE 表 请注意这是一个更
  • jQuery DatePicker:获取选定的日期

    我需要能够从日期选择器中获取选定的日期 并使用选定的值填充另一个文本框 我目前正在使用onClose像这样的函数 defaultDate datepicker onClose function theDate txtEntry1 text
  • Firefox 和 AJAX 文档元素后出现垃圾

    我使用页面获取脚本将网页动态加载到 div 中 这是代码 顺便说一句 我正在使用 Firefox 和 Kubuntu function fetch URL divId req window XMLHttpRequest new XMLHtt
  • 如何在c#中获取图片框上的绘图图形

    我在面板中创建了一个 PictureBox 我在 PictureBox 上画了一些图形 我想通过单击按钮来获取这些图形 我怎样才能做到这一点 Check this http www syncfusion com faq windowsfor
  • 在 Delphi XE5 中生成一个包含数组的示例 JSON

    来自 NET 我一直无法完成我认为简单的任务 我想用TJSONObject TJSONArray TJSONPair等构建一个简单的 JSON 如下所示 APIKEY sadfsafsafdsa UserID 123123123 Trans
  • Moment JS 不包括节假日

    我对 javascript 和 moment js 非常陌生 我正在开发一个网站 我们需要列出产品接下来 5 个可能的提货日期 不包括周末和节假日 我开始使用我在网上找到的一个函数 它可以很好地跳过周末 但我无法让假期工作 任何帮助 将不胜
  • 将 df 与用户定义的函数聚合

    我有一个关于将 pandas 数据帧与用户定义的函数聚合的问题 如果我有一个数据帧并在有或没有 groupby 的情况下运行 agg 则在使用内置函数时会聚合结果 另一方面 如果我使用自定义函数 则在使用 groupby 时它会按预期工作
  • 增加浏览器中的堆栈大小

    简短的问题 我有一个在递归方面非常深入的JavaScript 如何增加堆栈大小以便可以执行它 类似于 Unix 系统中的 ulimit s unlimited 长话短说 我必须画一张图 我使用 Cytoscape JS http js cy
  • Console.log 在 Chrome 中不起作用

    我试图从我的 javascript 代码中记录一些数据来检查它是否正确 但它似乎不起作用 即使我在控制台中输入 console log hello 控制台只返回未定义 这是正确的 但它也不会记录 hello 如果重要的话 我会使用 adbl
  • 使用 kubeadm 为什么要手动生成证书?

    我正在尝试遵循这个tutorial https blog inkubate io install and configure a multi master kubernetes cluster with kubeadm 自己生成证书而不是依
  • 如何删除分配有新放置的对象

    C 中的 new 运算符有很多面孔 但我对放置 new 感兴趣 假设您在特定的内存位置分配内存 int memoryPool poolSize sizeof int int p new mem int allocates memory in
  • 为什么通过字符串进行的往返转换对于 double 来说不安全?

    最近 我不得不将双精度数序列化为文本 然后将其取回 该值似乎不相等 double d1 0 84551240822557006 string s d1 ToString R double d2 double Parse s bool s1
  • 如何查看 Azure Devops 中的预定义变量

    我想查看预定义变量的路径值 例如 System DefaultWorkingDirectory 我想看到其中存储的价值 我无法找到此变量值 因此在 Azure DevOps 中哪里可以找到它 简而言之 我如何检查该特定发布管道中使用的 Bu
  • 易失性如何与常量一起工作?

    我有这段代码 像往常一样 变量 local 的值保持不变 因为它是const const int local 10 int ptr int local printf Initial value of local d n local ptr
  • 为什么 (A+B) 的 FFT 与 FFT(A) + FFT(B) 不同?

    我已经与一个非常奇怪的错误作斗争了近一个月了 向你们请教是我最后的希望 我用 C 编写了一个程序 集成了 2d卡恩 希利亚德方程 https en wikipedia org wiki Cahn E2 80 93Hilliard equat
  • 生成一个具有等宽列的表格(在 Xcode 的控制台上查看)

    这是我用来检查计算的一段代码 我只是将这些值写到 Xcode 的控制台中 每个数组均使用如下所示的值进行声明 var water deficit Int 该程序计算缺水值并将其附加到此列表中 计算未显示 let months January
  • maven编译器插件2.0.2

    您能否告诉我是否必须在我的 POM 中指定 maven compiler plugin 详细信息
  • 是否可以在运行时更改 ASP.NET Web.Config 值而不重新加载应用程序域?

    是否可以在运行时更改 Web Config 中的数据库连接字符串值 而无需重新加载应用程序域 这样做的原因是 我正在构建一个多租户应用程序 它使用一个代码实例和多个数据库实例方法 因此 web config 中的数据库连接字符串必须能够在运
  • JSHint 不允许我在“for”循环中使用“forEach”

    我有一个以数组作为值的对象 people steve foo bar joe baz boo 对于每个键 我想循环遍历相应数组中的值 足够简单 for var person in people person forEach function