# 介紹
* 順序訪問一個集合
* 使用者無需知道集合的內部結構(封裝)
# 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] 有值
# 設計原則驗證
* 迭代器對象和目標對象分離
* 迭代器將使用者和目標對象隔離開
* 符合開放封閉原則