深刻理解ES6筆記(八)迭代器(Iterator)與生成器(Generator)

主要知識點:迭代器、生成器、可迭代對象以及for-of循環、迭代器的高級功能以及建立異步任務處理器
圖片描述

《深刻理解ES6》筆記 目錄segmentfault

迭代器(Iterator)

迭代器是被設計專用於迭代的對象,帶有特定接口。全部的迭代器對象都擁有 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)

生成器( 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
相關文章
相關標籤/搜索