javascript - 生成器函数中的委托(delegate) yield (yield star、yield *)

标签 javascript ecmascript-6

ECMAScript 6 应该带来生成器函数和迭代器。生成器函数(具有 function* 语法)返回一个迭代器。迭代器有一个 next 方法,当重复调用时,该方法会执行生成器函数的主体,并在每个 yield 运算符处重复暂停和恢复执行。

ECMAScript 6 wiki on generators还引入了“委托(delegate) yield ”yield* 运算符,如下所示:

The yield* operator delegates to another generator. This provides a convenient mechanism for composing generators.

“委托(delegate)给另一个生成器”是什么意思?如何使用 yield* 来“方便地组合生成器”?

[您可以使用 Node v0.11.3 中的 --harmony-generators 标志来使用生成器。]

最佳答案

委托(delegate)给另一个生成器意味着当前生成器停止自行生成值,而是生成另一个生成器生成的值,直到耗尽它为止。然后它继续生成自己的值(如果有)。

例如,如果 secondGenerator() 生成从 1015 的数字,并且 firstGenerator() 生成从 15 的数字,但在生成 2 后委托(delegate)给 secondGenerator(),然后由 生成的值>firstGenerator() 将是:

1, 2, 10, 11, 12, 13, 14, 15, 3, 4, 5

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

关于javascript - 生成器函数中的委托(delegate) yield (yield star、yield *),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18586225/

相关文章:

javascript - 创建无效的 UTF8 字符串

javascript - Jquery - Bootstrap DataTable 刷新问题 DATA

javascript - 如何/是否重写异步 :false AJAX function?

javascript - boomerang vc导航定时页面加载时间RT插件中timeDone的区别

javascript - 如何使用 es6 模板文字作为 Angular 组件输入

javascript - 从对象中获取值到数组中

javascript - 合并按日期排序的对象数组

javascript - Angularjs在指令中绑定(bind)数组元素ng-repeat

javascript - 如何使用 ES6 模块语法(解构)导入属性?

javascript - 编译失败 : Parsing error: Unexpected token, 预期 ";"