発電機の新しいES6のジェネレータ機能

まず、発電機能は何ですか?

ジェネレータ関数は、一時的な実装に撤回する方法することができ、新機能ES6、の一つですが、また後で再入力機能が実行を継続リコールします。
そして、関数内で定義されているすべての状態変数は、ドロップアウトの影響を受けません。

第二に、文法

文方法:
関数の関数名*([1つのパラメータ[パラメータ2 [パラメータ... N]]]){JS文}

コールの説明:

ジェネレータ1)オブジェクトを呼び出す発生時には、イテレータを返す
イテレータオブジェクトが値を含んで返すnext()メソッドを有するの2)、および行わ
3)毎回次の呼び出しは、()メソッドはyied表現に遭遇します式中断位置
4)値はyied式が行わ値は、発電機が最後の値を生成したか否かを示す戻り表さ
5)場合、次の()メソッドのパラメータ値を渡し、パラメータは式の戻り値がyiedにより置換される
6)あなたは発電機でリターンを呼び出す場合、発電機は、前倒しで完了します

第三に、例

図1に示すように、自己定義されたファンクションジェネレータ過形成、各次()の呼び出しは、増分の値を返します

次のように出力されます。

偽1
2偽
3偽
4 // falseを偽である理由を考えてみて?
trueに未定義
我々は物事をやりました:

  1. ジェネレータ関数インクリメント(n)を宣言し、各時間増分がn未満である決定されます
  2. 次いで、(++サフィックスであるように)インクリメント収率インクリメント式、式の戻り値を、各

関数*インクリメント(N){
VARインデックス= 1。
一方、(指数<N)
収率インデックス++;
}

  1. ジェネレータ関数呼び出しは、変数のITへのイテレータオブジェクトを返し
    VAR増分をIT =(5);

  2. ループ反復するために
    //なぜ一時変数を宣言するのでしょうか?
    ため(LET I = 0;私は<5; Iは++)
    {
    せit.next TEMP =();
    にconsole.log(temp.value)
    にconsole.log(temp.done);
    }

直接it.next()

(; iが5 <I ++は、I = 0せ)用
{
にconsole.log(it.next()値)。
console.log(it.next()が行われます。);
}

//输出为:1、偽の、3、未定義、未定義真、未定義の、真、偽、真

図2に示すように、次の()通過パラメータ

関数*増分(){
せインデックス= 1。
console.log(収量指数++);
console.log(収量指数++);
console.log(収量指数++);
}

VARそれは増分を=();

it.next();
it.next(3)。
it.next(9)。

出力:3.9

3、明示的なリターン

関数*増分(){
せインデックス= 1。
収量指数++;
「完了」を返します。
収量指数++;
収量指数++;
}

VARそれは増分を=();

console.log(it.next()値。)。{値:1、行わ:偽}
はconsole.log(it.next()値。)。{値:「完了」、行わ:真}
はconsole.log(it.next()値。)。{値:未定義、行わ:真}

第四に、サプリメント

産出*

構文:

収量* [[式]]

説明:

別の発電機または反復可能オブジェクトへの委任のための収量*式。

栗:

関数* increment_slowly(){
せ指数= 1.1。
収量指数= 1.2。
収量指数+ = 0.11。
}

関数*増分(){
せインデックス= 1。
収量指数++;
)(increment_slowly *生じます。
収量指数++;
}

VARそれは増分を=();

console.log(it.next()値。)。//> 1
はconsole.log(it.next()値。)。//> 1.2
はconsole.log(it.next()の値です。); //> 1.31
はconsole.log(it.next()の値です。); //> 2

おすすめ

転載: blog.csdn.net/weixin_43858880/article/details/90637777