Generator
类型实现了 Iterable
接口。
1.生成器函数声明
生成器函数声明只需要在函数名前面加一个星号 *
即可,星号 *
不受两侧空格的影响。
生成器函数支持函数声明、函数表达式,不支持箭头函数表达式。
//生成器函数声明
[async] function* 生成器函数名() {}
[async] function *生成器函数名() {}
[async] function * 生成器函数名() {}
//生成器函数表达式
//命名生成器函数表达式
{ let | const } gf = [async] function *生成器函数名() {};
//匿名生成器函数表达式
{ let | const } gf = [async] function* () {};
2.yield和yield *
yield
关键字用来多次暂停和恢复一个生成器函数,它可以被认为是一个基于生成器函数版本的 return
关键字。
注意:同一个生成器函数内部可以同时出现 yield
和 return
。
function *生成器函数名() {
yield [表达式];
}
yield *
表达式用于委托给另一个生成器 或 可迭代对象。
与生成器函数定义类似,yield
关键字后的星号 *
不受两侧空格的影响。
function *name() {
yield* 表达式;
yield *表达式;
yield * 表达式;
}
3.生成器函数作用域
3.1全局函数
名称 | 修饰符 |
全局函数 | 参考生成器函数声明、生成器函数表达式。 |
3.2成员方法
名称 | 修饰符 |
静态访问器属性(类) | static get * 或 static set * |
静态方法(类) | static * |
静态初始化块(类) | static * |
实例访问器属性(类) | get * 或 set * |
实例方法(类) | * |
构造函数(类) | * |
访问器属性(对象字面量) | get * 或 set * |
方法(对象字面量) | * |
3.3局部函数
名称 | 修饰符 |
嵌套函数 | 参考生成器函数声明、生成器函数表达式。 |
4.生成器函数调用
生成器函数调用会返回一个Generator
类型的实例,与迭代器相似,Generator
也实现了 Iterator
接口。
原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/javascript/javascriptlang/20615.html