Generator関数
2438 ワード
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
関連部分も理解してから書きます.
Reference
この問題について(Generator関数), 我々は、より多くの情報をここで見つけました
https://velog.io/@jinwook567/generator-함수
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
関数に*を付けます.
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
関連部分も理解してから書きます.
Reference
この問題について(Generator関数), 我々は、より多くの情報をここで見つけました
https://velog.io/@jinwook567/generator-함수
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
const iterableObj = generatorFunc()
for(let number of iterableObj){
console.log(number)
}
const iterator = iterableObj[Symbol.iterator]();
iterator.next() // {done: false, value: 1}
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
関連部分も理解してから書きます.
Reference
この問題について(Generator関数), 我々は、より多くの情報をここで見つけました
https://velog.io/@jinwook567/generator-함수
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
function* generatorFunc2() {
yield* generatorFunc();
yield* generatorFunc();
}
for (let number of generatorFunc2()) {
console.log(number);
}
//1,2,3,4,5,1,2,3,4,5
Reference
この問題について(Generator関数), 我々は、より多くの情報をここで見つけました https://velog.io/@jinwook567/generator-함수テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol