首先,迭代器是一个函数接口,任何一个实现了Iterable接口的对象,都有一个Symbol.Iterable属性,这个属性默认引用一个接口函数,这个接口函数就是迭代器,迭代器必须通过连续不断地调用next()方法连续读取数值,这个方法返回一个IterableObject对象,该对象包含一个done和values的属性,done表示是否还有值可以迭代,values表示已经迭代过的数据。
迭代器是一个可以由任意对象实现的接口,支持连续获取对象产出的每一个值。任何实现Iterable接口的对象都有一个Symbol.iterator属性,这个属性引用默认迭代器。默认迭代器就像一个迭代器工厂,也就是一个函数,调用之后会产生一个实现Iterator接口的对象。
迭代器必须通过连续调用next()方法才能连续获取值,这个方法返回一个IteratorObject。这个对象包含一个done属性和一个value属性。前者时刻一个布尔值,表示十分还有更多值可以访问;后者包含迭代器返回的当前值。这个接口可以通过手动反复调用next()方法来消费,也可以通过原生消费者,比如for循环来自动消费。