# 介绍
* 顺序访问一个集合
* 使用者无需知道集合的内部结构(封装)
# ES6 中 Iterator 为何存在
* ES6 语法中,有序集合的数据类型有很多
* Array / Map / Set / String / TypedArray / Arguments / NodeList
* 需要有一个统一的遍历接口来遍历所有的数据类型
* 注意,Object 不是有序集合,可以用 Map 代替
# ES6 Iterator 是什么
* 以上数据类型,都有 [Symbol.iterator] 属性
* 属性值是函数,执行函数返回一个迭代器
* 这个迭代器就有 next 方法可顺序迭代子元素
* 可运行 Array.prototype[Symbol.iterator] 来测试
# ES6 Iterator 示例
es6 中 for .. in 是遍历对象的
es6 中 for .. of 是遍历迭代器的(有 Symbol.iterator 属性的才能用 for .. of )
# ES6 Iterator 与 Generator
* Iterator 的价值不限于上述几个类型的遍历,还有 Generator 函数的使用
* 即只要返回的数据符合 Iterator 接口的要求
* Generator 函数返回的结果,属性 [Symbol.iterator] 有值
# 设计原则验证
* 迭代器对象和目标对象分离
* 迭代器将使用者和目标对象隔离开
* 符合开放封闭原则