Мне трудно примирить эти два:
const gen = function *() {
yield 3;
yield 4;
return 5;
};
const rator = gen();
console.log(rator.next()); // { value: 3, done: false }
console.log(rator.next()); // { value: 4, done: false }
console.log(rator.next()); // { value: 5, done: true }
Выше мы видим все 3 значения, если мы вызываем next () в четвертый раз, мы получаем:
{ value: undefined, done: true }
, что имеет смысл. Но теперь, если мы используем его в цикле:
for(let v of gen()){
console.log('next:', v); // next: 3, next: 4
}
Наверное, я запутался, почему использование цикла for не выводит next: 5
, но вызов next () для итератора вручную может получить значение return
. Кто-нибудь может объяснить, почему это так?
Другими словами, я бы ожидал, что for loop
напечатает next: 5
, но это не так.