2017-08-20 69 views
1

考慮一個簡單的爲:ES6 for - 是否可迭代評估一次?

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

+1

幾乎,它被評估得到_iterable_,然後它從中獲得迭代器。生成器函數直接返回迭代器,並且迭代器也是迭代器,所以它們也可以在這種情況下工作。 – loganfsmyth

+0

@loganfsmyth我總是得到混淆的術語。感謝您的澄清。 :-) – philraj

相關問題