ホームページ  >  記事  >  ウェブフロントエンド  >  ES6のジェネレータ関数の説明(コード例)

ES6のジェネレータ関数の説明(コード例)

不言
不言転載
2018-11-14 16:39:111862ブラウズ

この記事では、laravel でのバリデーターの使用法 (コード例) を紹介します。必要な方は参考にしていただければ幸いです。

概要

実際、最初の数章はどのように書いたらよいのかわかりません。なぜなら、これらの章には常に、反復可能なオブジェクト、##などのより深い内容が含まれるからです。 # GeneratorIterator などについては、このシリーズを終えた後に整理した方がよいかもしれません。

Grammar

function* name([param[, param[, ... param]]])
{ 
    statements 
}

関数* を宣言識別子として使用し、これがジェネレーター関数であることを示します。

name は関数名です。

param はパラメータ名で、255

Statements です。は関数の本体です。

機能

ジェネレーター関数は実行中に一時停止でき、必要に応じて続行できます。

ジェネレーター関数は戻り値を返します。これはイテレータ オブジェクトであり、すぐには実行されません

ジェネレーター関数は return を使用できますが、return 後は反復できなくなります

Lizi-Infinite ID Grower

function* idMaker(begin=0){
  while(true)
    yield begin++;
}
let maker=idMaker(0)
console.log(maker.next().value) // 0
console.log(maker.next().value) // 1
console.log(maker.next().value) // 2
console.log(maker.next().value) // 3
...

説明 :

ジェネレータ関数を呼び出すとイテレータが返されます。イテレータはイテレータ プロトコルを満たすオブジェクトです。簡単に言うと、イテレータ オブジェクトには反復結果オブジェクトを返す関数が必要です。オブジェクトには次の関数が含まれます。次の 2 つの属性:

  1. value: この反復の結果


  2. done : true の場合、それはブール値を意味します。 false の場合は、反復を続行できます。


  3. #next 関数を呼び出すと、yield が発生して反復結果オブジェクトが返されるまでジェネレーター関数が実際に実行されます。

Chestnut-Limited

id

Grower<pre class="brush:php;toolbar:false">function* idMaker(begin=0){   while(begin&lt;3)     yield begin++; } let maker=idMaker(0) console.log(maker.next()) // {value: 0, done: false} console.log(maker.next()) // {value: 1, done: false} console.log(maker.next()) // {value: 2, done: false} console.log(maker.next()) // {value: undefined, done: true}</pre>関数の実行が完了すると、done は自動的に true になります

次はパラメータを受け取ります

function *createIterator() {
    let first = yield 1;
    let second = yield first + 2; // 4 + 2 
                                  // first =4 是next(4)将参数赋给上一条的
    yield second + 3;             // 5 + 3
}

let iterator = createIterator();

console.log(iterator.next());    // "{ value: 1, done: false }"
console.log(iterator.next(4));   // "{ value: 6, done: false }"
console.log(iterator.next(5));   // "{ value: 8, done: false }"
console.log(iterator.next());    // "{ value: undefined, done: true }"

これを説明するのは非常に面倒ですが、イテレータの最初の呼び出しです。 .next() は 1 を返し、コードは yield 1 で停止しますが、実際には、yield 1 の結果を最初の変数に保存します。2 回目の .next(4) の実行時には、この操作は行われません。 , ここでパラメータ 4 が渡されることに注意してください。このとき、4 は yield 1 の戻り値とみなされ、first に代入されるため、2 回目の実行は let first=4 の実行シーケンスとみなすことができます。

戻る

function* yieldAndReturn() {
  yield "1";
  return "2";
  yield "3"; 
}
var gen = yieldAndReturn()
console.log(gen.next()); // { value: "1", done: false }
console.log(gen.next()); // { value: "2", done: true }
console.log(gen.next()); // { value: undefined, done: true }

以上がES6のジェネレータ関数の説明(コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。