javascript - javascript 中的生成器函数

标签 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)
}

最佳答案

您在每次迭代中调用 num.next() 两次。您在 while() header 中调用它一次以检查结果是否未定义,然后您在正文中第二次调用它以记录该值。每次调用都会从生成器中检索下一个项目。因此,您检查偶数项是否为 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)
}

您可以使用内置的for-of 迭代方法,而不是显式调用.next() 方法。

function* numberGen(n) {
  for (let i = 0; i < n; i++) {
    yield i
  }
}

const num = numberGen(10)
for (let i of num) {
  console.log(i);
}

关于javascript - javascript 中的生成器函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61353396/

相关文章:

php - 使用 Javascript 和 PHP 的复选框自动求和

angularjs - 如何访问 Angular 1.6/es6 应用程序上的表单对象?

javascript - 我如何在 React 中重用一个方法来处理多个不同的引用?

javascript - 为什么 map() 返回一个具有未定义值的数组?

php - 在 Codeigniter 中使用 AJAX 显示图像列表

javascript - 将数组值推送到第一个索引

javascript - 在不中断行号的情况下在 SyntaxHighlighter 中启用换行符

javascript - redux react 错误 : Actions must be plain objects

javascript - 具有多个版本的 Javascript/不同环境的 Linting 文件

javascript - 根据在另一个具有不同属性的数组中的存在来过滤数组