关于 for...in 循环的困惑 [重复]

Posted

技术标签:

【中文标题】关于 for...in 循环的困惑 [重复]【英文标题】:Confusion about for...in loop [duplicate] 【发布时间】:2016-01-30 04:44:02 【问题描述】:

全部:

[更新问题已解决]我遇到的问题是: 因此,如果我使用“in”,则 func 是索引号,而使用“of”,则 func 是函数。 更多详情请参考Variables and scoping in ECMAScript 6

这是我学习 ES6 的第一个小时,我想知道为什么我不能使用如下语法:

for(func in funcs)  

在:

  "use strict";

  var funcs = [];
  for(let i=0; i<10; i++)
    funcs.push(function()
      console.log(i); 
    );
  

  let func;
  for(func in funcs)
    func();
  

它总是报告:

Uncaught TypeError: func is not a function

【问题讨论】:

你是说for offor in 仍然和 ES5 中的意思一样 @Bergi 谢谢,是的,这就是我应该使用的。事实证明,我混合了它们的用法。 【参考方案1】:

for... in 迭代对象键。从第一天开始就使用 javascript

我认为您将它与 for... of 混淆了,这是一个 ES6 功能,用于循环 iterable objects,包括数组。

for(let func of funcs)
  func();

Babel.js REPL

【讨论】:

谢谢,这对我来说是新知识!我会在 7 分钟后接受这个 谢谢,现在我清楚了用法,所以如果我使用“in”,则func是索引号,而使用“of”则是函数。 是的,有一些good reasons 不应该用于数组。 for... of 没有同样的问题。 对此的另一个困惑是:我读到“let”可以防止重复声明同一变量,但是如果我将“let”放在 for 中,它仍然有效,这是否意味着每一轮循环,ES6 将创建一个新块来保存该轮中的特定 func 变量? 我删除了 cmets,因为我认为它们有点令人困惑 - 这篇文章应该澄清 :-) 2ality.com/2015/02/es6-scoping.html

以上是关于关于 for...in 循环的困惑 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

for..in 和 hasOwnProperty [重复]

for...in和while循环

对 C# 循环中的多线程感到困惑 [重复]

关于model.train()的困惑[重复]

JS for in 循环中的key ,value 详解。

关于 Fetch API 的一个小困惑 [重复]