ES6 for - 是否只能迭代一次?

时间:2017-08-20 00:05:06

标签: ecmascript-6

考虑一个简单的:

for (const elem of document.getElementsByTagName('*') {
  // do something with elem
}

getElementsByTagName只评估一次或每次迭代?

THX!

1 个答案:

答案 0 :(得分:1)

在这种情况下,它被评估一次以获得iterable,然后用它来获得iterator。它重用迭代器来获取所有值并将它们传递给for块。这与使用生成器函数执行以下操作非常相似:

function* getIntegers(max) {
  for (let i = 0; i <= max; i++) {
    yield i;
  }
}

const iterator = getIntegers(15);

while (true) {
  const { done, value } = iterator.next();
  if (done) {
    break;
  }

  console.log(value);
}

loganfsmyth 所述,生成器函数直接返回迭代器。 注意:生成器函数也可以与for..of构造一起使用。

有关详细信息,请参阅this article on MDN