当前位置:网站首页>ES6 Beginner to Mastery #15: Generator Usage
ES6 Beginner to Mastery #15: Generator Usage
2022-08-10 00:55:00 【Kay Xiaomo】
说明
ES6 从入门到精通系列(全23讲)学习笔记.
generator 函数
可以通过 yield keyword suspends the function,为了改变执行流提供了可能,同时为了做异步编程提供了方案
difference from ordinary functions:
- 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()
call to restore the current yield 执行传入的实参.所以这里的 x 是 20.
使用场景
为不具备 iterator An object of the interface provides traversal operations
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)
}
边栏推荐
- Gartner's global integrated system market data tracking, hyperconverged market growth rate is the first
- harbor配置远程仓库
- matplotlib散点图颜色分组图例
- 【集训DAY5】快速排序【模拟】【数学】
- 力扣:518. 零钱兑换 II
- 金仓数据库 KingbaseGIS 使用手册(6.5. 几何对象编辑函数)
- Gold Warehouse Database KingbaseGIS User Manual (6.2. Management Functions)
- 2022/8/9 考试总结
- 781. 森林中的兔子
- 【励志】名言警句
猜你喜欢
随机推荐
Gold Warehouse Database KingbaseGIS User Manual (6.2. Management Functions)
How to match garbled characters regularly?
KingbaseGIS Jin Cang database using manual (6.3. Geometric object creation function)
【JZOF】77按之字形打印二叉树
61.【快速排序法详解】
基于 RocksDB 实现高可靠、低时延的 MQTT 数据持久化
国内BI厂商一览
如何正则匹配乱码?
CMake使用记录
软考 --- 软件工程(7)软件项目管理(下)
Qt 之 QDateEdit 和 QTimeEdit
Live Preview | ICML 2022 11 first-author scholars share online neural network, graph learning and other cutting-edge research
complete knapsack theory
Sqlserver限制账户在哪些ip下才可以访问数据库
中国SaaS企业排名,龙头企业Top10梳理
6款跨境电商常用工具汇总
用哈希简单封装unordered_map和unordered_set
SRv6性能测量
YOLOV5学习笔记(七)——训练自己数据集
Mysql/stonedb - slow SQL - 2022-08-09 Q16 analysis