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將作為一個整體被返回