Ran*_*lue 30 javascript ecmascript-6
ECMAScript 6应该带来生成器函数和迭代器.生成器函数(具有function*语法)返回迭代器.迭代器有一个next方法,当重复调用时,它执行生成器函数的主体,在每个yield操作员处重复暂停和恢复执行.
生成器上的ECMAScript 6 wiki还引入了"委托产量" yield*运算符,如下所示:
该
yield*运营商委托给另一发电机.这为组合生成器提供了方便的机制.
"委托给另一台发电机"是什么意思?我怎样才能yield*"方便地组合发电机"?
[您可以使用--harmony-generators标志在Node v0.11.3中使用生成器.]
Fré*_*idi 42
委托给另一个发电机意味着电流发电机自动停止产生值,而是产生另一个发电机产生的值,直到它耗尽它.然后它恢复生成自己的值,如果有的话.
例如,如果secondGenerator()从产生数字10到15,并firstGenerator()从产生数字1到5但委托给secondGenerator()制造之后2,然后通过产生的值firstGenerator()将是:
1, 2, 10, 11, 12, 13, 14, 15, 3, 4, 5
Run Code Online (Sandbox Code Playgroud)
function* firstGenerator() {
yield 1;
yield 2;
// Delegate to second generator
yield* secondGenerator();
yield 3;
yield 4;
yield 5;
}
function* secondGenerator() {
yield 10;
yield 11;
yield 12;
yield 13;
yield 14;
yield 15;
}
console.log(Array.from(firstGenerator()));Run Code Online (Sandbox Code Playgroud)
委托收益不必仅委托给另一个生成器,而是委托给任何迭代器,因此第一个答案有点不确定。考虑这个简单的例子:
function* someGenerator() {
yield 0;
yield [1,2,3];
yield* [1,2,3];
}
for (v of someGenerator()) {
console.log(v);
}Run Code Online (Sandbox Code Playgroud)
生成器本身内部没有其他函数 - 但yield* [1, 2, 3]委托给该Array.prototype[@@iterator]方法。