3 回答

TA贡献1833条经验 获得超4个赞
您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);
}

TA贡献1801条经验 获得超16个赞
在 while 条件检查语句中,您消耗二分之一的值仅用于检查,迭代器是可消耗的,这就是为什么我们只看到奇数,偶数用于真实检查
function* numberGen(n){
for (let i=0;i<n;i++){
yield i
}
}
const num = numberGen(10);
//using spread opertaor to iterate all values
console.log([...num]);
//or you can use forOf
//for( number of num ){
// console.log(number);
//}
添加回答
举报