Generator的基本用法

看風景就發表於2018-08-21

Generator函式是一個狀態機,封裝了多個內部狀態。執行一個Generator,會返回一個迭代器物件,
通過迭代器物件,可以遍歷Generator函式內部的每個狀態。因此,Generator函式可以看做是一個
迭代器生成器。

1. Generator基本形式

function *foo() {
    yield 1;
    yield 2;
    yield 3;
    yield 4;
    yield 5;
    return 6;
}

執行foo得到一個迭代器

var fooIterator = foo();

2.for-of遍歷generator

通過for of可以遍歷迭代器

for(let item of fooIterator){
    console.log(item);
}

3.yield語句

Generator中用yield來執行一條語句,一個yield對應一個狀態,yield執行完後面的語句會返回後面表示式的值,並且停留在此狀態

4.狀態切換

通過next()方法可以切換到下一個狀態

console.log(fooIterator.next()) // {value:1,done:false}

並且next方法可以傳入引數,作為上一個狀態

5.yield* 語句

Generator內部呼叫另外一個Generator要使用yield*語句,這個內部的Generator會被打碎,內部狀態會變成當前Generator的狀態。如果使用yield語句執行,內部的Generator將作為一個整體被返回

相關文章