Ale*_*_js 2 javascript ecmascript-6
我是 javascript 新手,无法理解生成器函数的这种行为。为什么它只输出奇数 (1,3,5,7,9)?
function* numberGen(n){
for (let i=0;i<n;i++){
yield i
}
}
const num = numberGen(10)
while (num.next().value!=undefined){
console.log(num.next().value)
}
Run Code Online (Sandbox Code Playgroud)
您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)
}Run Code Online (Sandbox Code Playgroud)
.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);
}Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37 次 |
| 最近记录: |