1

在一次关于 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两次。问题是:这能以某种方式通过单一产量解决吗?

4

1 回答 1

2
  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);

于 2018-11-08T14:56:46.370 回答