生成器对象也实现了 Iterable
接口。
1.生成器函数声明
定义生成器函数只需要在普通函数名称前面加一个星号(*
),只要是可以定义函数的地方(不支持箭头函数),就可以定义生成器。
标识生成器函数的星号不受两侧空格的影响。
//生成器函数声明定义方式
function* 生成器函数名() {}
function *生成器函数名() {}
function * 生成器函数名() {}
//生成器函数表达式定义方式
let 变量名 = function* [生成器函数名]() {};
//作为对象字面量方法的生成器函数
let foo = {
* 生成器函数名() {}
}
//作为类静态方法的生成器函数
class Foo {
static * 生成器函数名() {}
}
//作为类实例方法的生成器函数
class Foo {
* 生成器函数名() {}
}
2.yield
yield
关键字用来多次暂停和恢复一个生成器函数,它可以被认为是一个基于生成器函数版本的 return
关键字。
注意:同一个生成器函数内部可以同时出现 yield
和 return
。
function* 生成器函数名() {
yield [表达式];
}
3.yield*
yield*
表达式用于委托给另一个生成器 或 可迭代对象。
与生成器函数定义类似,yield
星号不受两侧空格的影响。
function* name() {
yield* 表达式;
}
4.调用生成器函数
调用生成器函数会生成一个Generator
对象,与迭代器相似,Generator
也实现了 Iterator
接口。
原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/javascript/javascriptlang/20615.html