主要知識點:迭代器、生成器、可迭代對象以及for-of循環、迭代器的高級功能以及建立異步任務處理器
《深刻理解ES6》筆記 目錄segmentfault
迭代器是被設計專用於迭代的對象,帶有特定接口。全部的迭代器對象都擁有 next() 方法,會返回一個結果對象。該結果對象有兩個屬性:對應下一個值的 value ,以及一個布爾類型的 done ,其值爲 true 時表示沒有更多值可供使用。
ES5實現迭代器的代碼以下:異步
function createIterator(items) { var i = 0; return { next: function() { var done = (i >= items.length); var value = !done ? items[i++] : undefined; return { done: done, value: value }; } }; } var iterator = createIterator([1, 2, 3]); console.log(iterator.next()); // "{ value: 1, done: false }" console.log(iterator.next()); // "{ value: 2, done: false }" console.log(iterator.next()); // "{ value: 3, done: false }" console.log(iterator.next()); // "{ value: undefined, done: true }" // 以後的全部調用 console.log(iterator.next()); // "{ value: undefined, done: true }"
生成器( generator )是能返回一個迭代器的函數。生成器函數由放在 function 關鍵字以後的一個星號( * )來表示,並能使用新的 yield 關鍵字。函數
// 生成器 function *createIterator() { yield 1; yield 2; yield 3; } // 生成器能像正規函數那樣被調用,但會返回一個迭代器 let iterator = createIterator(); console.log(iterator.next().value); // 1 console.log(iterator.next().value); // 2 console.log(iterator.next().value); // 3