当前位置:网站首页>ES6 从入门到精通 # 15:生成器 Generator 的用法
ES6 从入门到精通 # 15:生成器 Generator 的用法
2022-08-09 22:42:00 【凯小默】
说明
ES6 从入门到精通系列(全23讲)学习笔记。
generator 函数
可以通过 yield 关键字将函数挂起,为了改变执行流提供了可能,同时为了做异步编程提供了方案
跟普通函数的区别:
- function 后面,函数名之前有个
*
号 - 只能在函数内部使用 yield 表达式,让函数挂起
function * func() {
yield 3;
yield 1;
yield 2;
}
// 返回一个遍历器,可以调用 next()
let kaimo = func();
console.log(kaimo)
console.log(kaimo.next())
console.log(kaimo.next())
console.log(kaimo.next())
console.log(kaimo.next())
总结:generator 函数是分段执行的,yield 语句是暂停执行,而 next()
恢复执行
function * func() {
console.log("start")
let x = yield 3;
console.log("x-->", x)
let y = yield 1;
console.log("y-->", y)
let z = yield 2;
console.log("z-->", z)
return x + y + z;
}
let kaimo = func();
console.log(kaimo.next(10))
console.log(kaimo.next(20))
console.log(kaimo.next(30))
console.log(kaimo.next(40))
console.log(kaimo.next(50))
这里的 let x = yield 2;
表达式里的 x 不是 yield 2
返回值,它是 next()
调用恢复当前 yield 执行传入的实参。所以这里的 x 是 20。
使用场景
为不具备 iterator 接口的对象提供遍历操作
function * objectEntries(obj) {
// 获取对象的所有keys保存到数组 [name, value]
const propKeys = Object.keys(obj);
for(const propkey of propKeys) {
yield [propkey, obj[propkey]]
}
}
const kaimo = {
name: "凯小默",
value: "kaimo313"
}
kaimo[Symbol.iterator] = objectEntries(kaimo);
console.log(kaimo);
遍历:
for(let [key, value] of kaimo[Symbol.iterator]) {
console.log(key, value)
}
边栏推荐
- CAD 绘制圆角处理
- JS--hashchange事件--使用/教程
- Gartner全球集成系统市场数据追踪,超融合市场增速第一
- ABAP中Collect的用法
- A summary of 6 common tools for cross-border e-commerce
- tiup cluster scale-out
- Technology feast!Huayun Data brings six topics to OpenInfra Days China
- 力扣:518. 零钱兑换 II
- Explore the TiDB Lightning source code to solve the found bugs
- HStreamDB v0.9 发布:分区模型扩展,支持与外部系统集成
猜你喜欢
恭喜获奖得主 | 互动有礼获赠 Navicat Premium
用哈希简单封装unordered_map和unordered_set
Explore the TiDB Lightning source code to solve the found bugs
kubesphere
&& 不是此版本的有效语句分隔符
你的手机曾经被监控过吗?
【集训DAY4】矩形【线段树】
The latest "Grain Academy Development Tutorial" in 2022: 10 - Front-end payment module
【集训DAY5】快速排序【模拟】【数学】
首席信息官如何将可持续性和技术结合起来
随机推荐
MQTT X Web:在线的 MQTT 5.0 客户端工具
6款跨境电商常用工具汇总
直播预告 | ICML 2022 11位一作学者在线分享神经网络,图学习等前沿研究
String类常用方法
上海一科技公司刷单被罚22万,揭露网络刷单灰色产业链
Filament - Material basic graphics drawing
多商户商城系统功能拆解24讲-平台端分销会员
2021年国内外五大BI厂商——优秀的商业智能工具推荐
力扣:322. 零钱兑换
基于 RocksDB 实现高可靠、低时延的 MQTT 数据持久化
Force buckle: 279. Perfect square
恭喜获奖得主 | 互动有礼获赠 Navicat Premium
ABAP中Collect的用法
70. 爬楼梯进阶版
The latest "Grain Academy Development Tutorial" in 2022: 10 - Front-end payment module
数据库优化 | 干货
tiup cluster upgrade
Leetcode 530. 二叉搜索树的最小绝对差
HStreamDB v0.9 发布:分区模型扩展,支持与外部系统集成
matplotlib散点图颜色分组图例