Generator関数


Generator関数の概念。


generator関数はiterableオブジェクトを作成できます.[Symbol.iterator]プロパティに特定の関数を追加するよりも、作成が容易です.

Generator関数の作成方法


関数に*を付けます.yieldキーワードでiterableを使用すると、順次値を渡すことができます.
function* generatorFunc() {
  yield 1;
  yield 2;
  yield 3;
  yield 4;
  yield 5;
}
*関数名には貼り付けられますが、通常は関数名の後に貼り付けられます.

Generator関数の使用方法


iterableオブジェクトのように、for ..ofを巡回できます.
const iterableObj = generatorFunc()
for(let number of iterableObj){
	console.log(number)
}
iteratorも使用できます.
const iterator = iterableObj[Symbol.iterator]();
iterator.next() // {done: false, value: 1}
Generator関数によって生成されたiterableオブジェクトは、[Symbol.iterator]プロパティにアクセスせず、nextメソッドを使用できます.
iterableObj.next() //{done: false, value:2}
iterableObj[Symbol.iterator]().next() === iterableObj.next() //true

サードパーティ関数の特徴。


1.Generator関数で生成されたiterableオブジェクトは1回しかループできません。

const iterableObj2 = generatorFunc()
for(let number of iterableObj2){
	console.log(number)
}
for(let number of iterableObj2){
	console.log(number)
}
コード実行結果は、上のfor文のみを巡回します.

2.returnキーワードは{don:true}をエクスポートします。

for ..of{done:true}では巡回しないので、巡回したいなら降伏キーワードを使うべきです.
function* generatorFunc3() {
  yield 1;
  yield 2;
  return 3;
}
for (let number of generatorFunc3()) {
	console.log(number)
}
//1,2
反復器の例
const iterableObj3 = generatorFunc3();
console.log(iterableObj3.next()); //{done:false, value:1}
console.log(iterableObj3.next()); //{done:false, value:2}
console.log(iterableObj3.next()); //{done:true, value:3}
console.log(iterableObj3.next()); //{done:true, value:undefind}

発電機付加機能。


1.企業連合会

yield*キーワードを使用して、他のジェネレータ関数の値に渡すことができます.yield*キーワードの後に通常の関数を実行すると、タイプエラーが発生します.
function* generatorFunc2() {
  yield* generatorFunc();
  yield* generatorFunc();
}

for (let number of generatorFunc2()) {
  console.log(number);
}
//1,2,3,4,5,1,2,3,4,5

2.外部はGenerator関数に値を割り当てます。


まだよく分かりません.理解して書き直します.

3. throw


関連部分も理解してから書きます.