javascript - 有没有办法减少与其调用者通信的无限生成器中的产量数量?

标签 javascript ecmascript-6 es6-generator

在关于 Javascript 生成器的讨论中,有人设计了一个有趣的函数:

function *foo() {
    var y = 1;
    while(true) yield (y = (y * (yield)));
}

现在,可以通过以下方式使用此功能:

var results = [];
var bar = foo();
bar.next();
results.push(bar.next(2));
bar.next();
results.push(bar.next(2));
bar.next();
results.push(bar.next(2));
bar.next();
results.push(bar.next(2));

正如我们所见,为了获得下一个产品,我们需要调用 next 两次。问题是:这能否以某种方式通过一次 yield 解决?

最佳答案

  while(true) y *=  yield y;

只产生 y,然后将 y 乘以它的结果。

function *foo() {
    let y = 1;
    while(true) y *=  yield y;
}

const bar = foo();
bar.next();
console.log(bar.next(2).value);
console.log(bar.next(2).value);
console.log(bar.next(2).value);

关于javascript - 有没有办法减少与其调用者通信的无限生成器中的产量数量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53210145/

相关文章:

javascript - 在 createElement() 上 react 生命周期方法

javascript - 使用 jCrop api 显示所选裁剪区域的坐标

javascript - 为什么我的过滤功能不起作用? (JavaScript)

javascript - 数组解构赋值在 Node.js 中使用 Harmony 选项在 v8 中不起作用

javascript - 从文件夹 ES6 导入

javascript - 当我们通过 for..of 迭代它时,可以将参数传递给生成器吗?

javascript - 为什么我的生成器在迭代后变空了?

asp.net - 在网站上放置广告的最佳做法是什么?

javascript - jQuery/Ajax 在警报中正确发送 "data-"值,但无法将其附加到 php 中的特定 div 中