returnの無いジェネレータ関数に出会ったので、そのジェネレータ関数をループした場合どのような挙動になるか調べてみた。
このようなジェネレータ関数があったとする。
function* gen() {
yield 1;
yield 2;
// return;
// ↑本来はこのようにreturnを書いてdone: trueであることを明示する
}
これをループして中身を取り出してみる。
for (const ite of get()) {
console.log(ite)
}
// 1
// 2
ループは2回で終了。どうやらreturnを書かなくても終了判定されるらしい。
確かめるためにnext()で呼び出したらどうなるか試してみた。
const ite = gen()
console.log(ite.next())
// {value: 1, done: false}
console.log(ite.next())
// {value: 2, done: false}
console.log(ite.next())
// {value: undefined, done: true}
returnを書かなくてもyieldが最後まで到達したことを確認して自動的にdone: trueとされることを確認。