JavaScript でのジェネレーターとイテレーターの使用に関する簡単な説明_基礎知識

WBOY
リリース: 2016-05-16 15:48:15
オリジナル
1004 人が閲覧しました

ジェネレーターの話になると、誰もが非同期などの話題を持ち出します。これは明らかに何か奇妙なことが原因でした。 Iterator は Generator と密接に関連している必要があります。Generator を使用して非同期処理を処理することは、一部の C# プログラマだけが考えていることかもしれません。もちろんこの使い方は一通り揃っているのですが、個人的にはあまり好きではありません。
Generatorを非同期で接続する場合、ポイントとなるのは次に呼び出すタイミングだけです。 next は非同期で呼び出すことができるため、Generator を非同期で悪用することができます。
ただし、次のメソッドは非同期で呼び出すこともできますが、正しい使用方法は同期的に呼び出す必要があると思います。少なくとも、Generator インスタンスが for-of ループまたは [...obj] の構造化で使用される場合、next は継続的に呼び出されます。
next の同期と非同期の問題に加えて、next のパラメータも問題になります。 next が呼び出されたときに渡されるパラメーターは yield 演算子の戻り値として使用されるため、ジェネレーターにはそれらを使用するためのより豊富な方法があります。初期の Python では、yield は演算子ではなくステートメントであったため、そのような使用法はありませんでした。後のバージョンでは演算子として yield を使用したため、さまざまな落とし穴が発生しました。
Generator インスタンスを Iterator として使用する場合、 next は非同期で呼び出されず、 next はパラメーターで渡されません。これがジェネレーターの正しい使い方だと思います。率直に言うと、Generator は Iterator を実装するために使用されます。少なくともジェネレーターという名前にはそれ以外の意味はありません。使用例を次に示します:

を実行します

<script>
var match = function * (pattern, string) {
 var regexp = new RegExp(pattern, 'g'); 
 for(let i; i = regexp.exec(string); yield i);
};

for(let i of match('a', 'abcabcabc')) {
 console.log(i);
}
</script>

ログイン後にコピー

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!