ジェネレータ機能は、様々な角度に理解されています。まず、ジェネレータ関数であるように構文は、それが理解することができる状态机
、パッケージの内部状態の複数。
ジェネレータ関数は、関数発生器状態機械、又はビジターオブジェクト生成機能に加えて、ある実行ビジターオブジェクトを返します。訪問者のオブジェクトを返す、あなたはジェネレータ関数内の各状態を経て回すことがあります。
ジェネレータ関数は通常の関数であるが、2つの機能があります。まず、function
キーワードや関数名の間にアスタリスク(*)があり、第二に、使用する関数yield
式を、内部状態の異なる定義(英語での収率は、「出力」を意味します)。
function* helloWorldGenerator() {
yield 'hello';
yield 'world';
return 'ending';
}
var hw = helloWorldGenerator();
行われていない、また関数が結果を返すようになっているが、オブジェクトの内部状態を指すようにポインタジェネレータ関数を呼び出した後
次に、あなたは訪問者のオブジェクトを呼び出す必要がありますnext
方法を、その次の状態へのポインタが移動しています。これは、各呼び出しでnext
次まで、ヘッドの機能や実行を停止する方法、一箇所から内部ポインタyield
表現(あるいはreturn
これまでの文)。換言すれば、発電が行わ区分関数は、収量の発現がされている中断実行標識、及びnext
方法ができ再開実行。
hw.next()
// { value: 'hello', done: false }
hw.next()
// { value: 'world', done: false }
hw.next()
// { value: 'ending', done: true }
hw.next()
// { value: undefined, done: true }
value
表しyield
またはreturn
値(ノーリターン文の場合は、value属性の値はundefined
)、done
トラバースを終了するかどうかを示します。