【问题标题】:Confusion about for...in loop [duplicate]关于 for...in 循环的困惑 [重复]
【发布时间】: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 谢谢,是的,这就是我应该使用的。事实证明,我混合了它们的用法。

标签: javascript ecmascript-6


【解决方案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
猜你喜欢
  • 2020-05-15
  • 1970-01-01
  • 2020-03-07
  • 2020-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多