考虑一个简单的:
for (const elem of document.getElementsByTagName('*') {
// do something with elem
}
getElementsByTagName只评估一次或每次迭代?
THX!
答案 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。