迭代 iteration,按照顺序多次执行一段程序。

for实现循环,循环是迭代机制的基础:执行迭代次数、迭代每次的操作、每次循环会在下一次迭代开始之前完成、每次迭代顺序是事前定义好的。这也要求迭代目标是有序的,就比如数组。

使用for循环有几个问题:

  • 每一项的获取只能通过引用获得数组对象,不适合所有数据类型
  • 遍历顺序来自递增索引,不适合所有数据类型

看多种语言,都有迭代器模式:不用知道如何实现迭代就能实现迭代操作。

  1. 把某些结构称为 可迭代对象iterable
  2. 有迭代器接口,使用迭代器iterator 消费

怎么理解迭代器接口?就是一种能力,支持迭代的自我识别能力、创建实现接口的能力。

很多js内置的类型实现了 interable 接口,比如 String Array Map Set arguments NodeList等DOM结合类型。

  1. var arr=[1,2,3]
  2. arr[Symbol.iteractor]

很多细节不是特别懂。实际中没有用过。

生成器

可以让函数暂停和恢复代码的能力。使用生成器可以自定义迭代器、实现协程。

这个先略过了。

-1 参考资料