3 回答

TA貢獻(xiàn)1833條經(jīng)驗 獲得超4個贊
您num.next()在每次迭代中調(diào)用兩次。您在while()標(biāo)題中調(diào)用它一次以檢查結(jié)果是否未定義,然后在正文中再次調(diào)用它以記錄值。每個調(diào)用都從生成器中檢索下一個項目。因此,您檢查偶數(shù)項null,并在其后記錄奇數(shù)項。
相反,您應(yīng)該將變量分配給單個調(diào)用
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()您可以使用內(nèi)置的for-of迭代方法,而不是顯式調(diào)用該方法。
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貢獻(xiàn)1801條經(jīng)驗 獲得超16個贊
在 while 條件檢查語句中,您消耗二分之一的值僅用于檢查,迭代器是可消耗的,這就是為什么我們只看到奇數(shù),偶數(shù)用于真實檢查
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);
//}
添加回答
舉報