遍历器(Iterator)就是一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制。
任何数据结构只要部署 Iterator 接口,就可以完成遍历操作。在这里,iterator接口可以看成对象的一个属性,属性的名字就是 Symbol.iterator
- ES6 创造了一种新的遍历命令 for…of 循环,Iterator 接口主要供 for…of 消费
- 原生具备 iterator 接口的数据(可用 for of 遍历)
- Array
- Arguments
- Set
- Map
- String
- TypedArray -概念
- NodeList
- 工作原理
- 创建一个指针对象(由Symbol.iterator方法创建后返回),指向当前数据结构的起始位置
- 第一次调用对象的 next 方法,指针自动指向数据结构的第一个成员
- 接下来不断调用 next 方法,指针一直往后移动,直到指向最后一个成员
- 每调用 next 方法返回一个包含 value 和 done 属性的对象
注: 需要自定义遍历数据的时候,要想到迭代器。

iterator是调用后返回来的指针对象,指向当前数据结构的起始位置。
因为对象可用for in来遍历,不能用for of来遍历,所以可以判断其是没有iterator接口的,事实也确实如此
这个时候就可以自定义 iterator接口,自定义的接口和原理相同。
从上图的代码中可以看到,自定义的iterator接口返回一个对象,这个是和原理1相同的,
然后返回的对象中有一个next方法,这也是和原理2相同的,然后在next方法里面,返回一个包含 value 和 done 属性的对象,这也是和原理相同的。
第一次调用的时候,index=0,指向stus的第一个,不断遍历index自增,直到遍历完成,done为true。
其中next可以改成箭头函数,这样this就默认为上下文中的this。不需要再通过_this传进去
