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);
//}
添加回答
舉報