迭代 iteration,按照顺序多次执行一段程序。
for实现循环,循环是迭代机制的基础:执行迭代次数、迭代每次的操作、每次循环会在下一次迭代开始之前完成、每次迭代顺序是事前定义好的。这也要求迭代目标是有序的,就比如数组。
使用for循环有几个问题:
- 每一项的获取只能通过引用获得数组对象,不适合所有数据类型
- 遍历顺序来自递增索引,不适合所有数据类型
看多种语言,都有迭代器模式:不用知道如何实现迭代就能实现迭代操作。
- 把某些结构称为 可迭代对象iterable
- 有迭代器接口,使用迭代器iterator 消费
怎么理解迭代器接口?就是一种能力,支持迭代的自我识别能力、创建实现接口的能力。
很多js内置的类型实现了 interable 接口,比如 String Array Map Set arguments NodeList等DOM结合类型。
var arr=[1,2,3]
arr[Symbol.iteractor]
很多细节不是特别懂。实际中没有用过。
生成器
可以让函数暂停和恢复代码的能力。使用生成器可以自定义迭代器、实现协程。
这个先略过了。