Вы звоните num.next()
дважды в каждой итерации. Вы вызываете его один раз в заголовке while()
, чтобы проверить, не является ли результат неопределенным, затем вы вызываете его второй раз в теле, чтобы записать значение. Каждый вызов извлекает следующий элемент из генератора. Таким образом, вы проверяете четные элементы на null
и регистрируете нечетные элементы после него.
Вместо этого вам следует присвоить переменную одному вызову
function* numberGen(n){
for (let i=0;i<n;i++){
yield i
}
}
const num = numberGen(10)
let i;
while ((i = num.next().value) !== undefined){
console.log(i)
}
Вместо явного вызова метода .next()
можно использовать встроенный метод итерации for-of
.
function* numberGen(n) {
for (let i = 0; i < n; i++) {
yield i
}
}
const num = numberGen(10)
for (let i of num) {
console.log(i);
}