function *gimme1to2_10to15_3to5() {
var ten = gimme10to15();
yield 1; yield 2;
for (var i = 10; i <= 20; i++)
yield *ten;
yield 3; yield 4; yield 5;
}
function *gimme10to15() {
for (var i = 10; i <= 15; i++)
var x = yield i;
}
let gen = gimme1to2_10to15_3to5();
var ar = [];
for (var i = 0; i < 12; i++)
{
var r = gen.next();
ar [i] = r.value + (r.done ? "!" : "..");
}
console.log (ar.join (", "));
结果是
1.., 2.., 10.., 11.., 12.., 13.., 14.., 15.., 3.., 4.., 5.., undefined!
笔记
带有yield *的函数从内部生成器请求 11 个值,但只接收它应该收到的 10..15。多余的yield *调用无效。
内部生成器的done值对其调用者返回的done没有影响。
输出显示未定义!最后,因为测试循环被编写为超出所需数量的值,以显示生成器的done = true
此输出来自 ES6 测试场Babel,上面展示的语义应被视为截至 2016 年 2 月 5 日的临时性。