考慮一個簡單的爲:ES6 for - 是否可迭代評估一次?
for (const elem of document.getElementsByTagName('*') {
// do something with elem
}
的getElementsByTagName不會只計算一次,或在每次迭代?
thx!
考慮一個簡單的爲:ES6 for - 是否可迭代評估一次?
for (const elem of document.getElementsByTagName('*') {
// do something with elem
}
的getElementsByTagName不會只計算一次,或在每次迭代?
thx!
在這種情況下,它被評估一次以獲得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。
幾乎,它被評估得到_iterable_,然後它從中獲得迭代器。生成器函數直接返回迭代器,並且迭代器也是迭代器,所以它們也可以在這種情況下工作。 – loganfsmyth
@loganfsmyth我總是得到混淆的術語。感謝您的澄清。 :-) – philraj
只有一次,否則它會永遠循環。 –