让我们创建一个迭代器和一个生成器以类似地工作。
for of
如果它包含 break 或 return 语句,它们在循环中表现不同的原因是什么?
生成器完成,而迭代器仍在循环结束后进行。
function *createGenerator() {
for ( let i=0; i<5; i++ ) {
yield i;
}
}
function createIterator() {
const arr = [1, 2, 3, 4, 5];
return arr[ Symbol.iterator ]();
}
function runForOfLoopOn( iterable ) {
for ( const item of iterable ) {
if ( item == 2 ) {
break;
}
}
}
const iterator = createIterator();
const generator = createGenerator();
runForOfLoopOn( iterator );
runForOfLoopOn( generator );
console.log( 'Iterator is done:', iterator.next().done );
console.log( 'Generator is done:', generator.next().done );