包含:第七章和第八章
说两下:用块引用就是图好看
迭代就是按照顺序反复多次执行一段程序
迭代器模式
1.迭代器是按需创建的一次性对象,每个迭代器都会关联一个可迭代对象。迭代器无需了解可迭代对象的结构,只需要直到如何取得连续的值。这正是Iterable和Iterator的强大之处.
2.我们把实现Iterable接口的结构,称之为可迭代对象(支持迭代自我识别能力和创建实现Iterator接口的对象能力)
3.显式调用工厂函数生成迭代器 AA[Symbol.iterator]
不需要使用显式调用,可以用原生语言特性自动兼容:
for of循环,数组解构,扩展操作符,Array,from(),创建集合,创建映射等等(剩下三未学
4.迭代器API使用next()方法在可迭代对象中遍历,每次成功调用next()就会返回IteratorResuit对象(包含done和value)
后续的自定义迭代器和提前终止,不了解,未懂
生成器
1.生成器的形式是一个函数,函数名称那面加一个星号表示它是一个生成器。
后调用生成器函数,产生生成器对象。由于生成器对象有next()方法,同时可以用此方法与yield关键字配合,实现在生成器的中断与执行。
2.默认生成器关闭,每次调用next()(迭代就是用next),便执行函数,直至遇到yield关键字(yield所在行仍然会执行)
3.生成器对象可作为可迭代对象,先执行生成器函数,再执行主函数。
把yield之前的作用域算作迭代的一次。
4.yield不仅可以作为函数的中间返回语句,还可以作为函数的中间参数使用。
yield会接受next()方法传的值。注意:第一次next()传值无效,因为第一次是生成函数的执行(懂了但没完全懂
yield可以产生值