ES6ジェネレーターとイテレーター:開発者ガイド
ES6は、JavaScript言語に多くの新機能を導入しました。これらの機能の2つ、ジェネレーターとイテレーターは、より複雑なフロントエンドコードで特定の機能を作成する方法を大きく変更しました。
彼らはうまく機能しますが、実際の機能は少し混乱する可能性がありますので、詳しく見てみましょう。
キーポイント
- ES6は、ループ用のよりクリーンな書き込み方法を提供し、データセット内の要素と直接対話するためのよりPythonのような方法を提供し、コードを読みやすくしやすくします。
- ES6のジェネレーターは、各呼び出しの間の状態を覚えている関数です。彼らは呼び出されるたびにシーケンスで次の値を生成し、カスタムイテレーションを効果的に作成できます。
- ジェネレーター関数の「evels」キーワードは「return」に似ていますが、関数の状態を保持し、次の呼び出しで割り込みから実行を継続できるようにします。
- ノードと最新のブラウザはES6機能をサポートしていますが、古いブラウザーでは、BABELなどの翻訳者がES6コードをECMAScript 5コードに変換する必要がある場合があります。
iterator
反復はプログラミングにおける一般的な慣行であり、通常、一連の値をループしたり、各値を変換したり、後で使用するために何らかの方法で使用または保存するために使用されます。
JavaScriptでは、私たちは常にループ用のようなものを持っています:
for (var i = 0; i < foo.length; i++) { // 对i执行某些操作 }
for (const i of foo) { // 对i执行某些操作 }
配列内の各番号が素数であるかどうかを確認したいとします。これを行う関数を作成することでこれを行うことができます。このように見えるかもしれません:
function isPrime(number) { if (number <= 1) { return false; } else if (number === 2) { return true; } for (var i = 2; i < number; i++) { if (number % i === 0) { return false; break; } } return true; }
var possiblePrimes = [73, 6, 90, 19, 15]; var confirmedPrimes = []; for (var i = 0; i < possiblePrimes.length; i++) { if (isPrime(possiblePrimes[i])) { confirmedPrimes.push(possiblePrimes[i]); } } // confirmedPrimes现在是[73, 19]
const possiblePrimes = [73, 6, 90, 19, 15]; const confirmedPrimes = []; for (const i of possiblePrimes){ if ( isPrime(i) ){ confirmedPrimes.push(i); } } // confirmedPrimes现在是[73, 19]
舞台裏では、この反復によりES6の光沢のある新しいSymbol.iterator()メソッドが活用されます。この方法は反復を記述する責任があり、呼び出されると、ループの次の値を含むJavaScriptオブジェクトと、ループが完了するかどうかに応じてtrueまたはfalseです。
この詳細に興味がある場合は、Jake Archibaldのこの素晴らしいブログ投稿「Iterators Gongent Iterate」を読むことができます。この記事の別の部分であるジェネレーターを掘り下げるにつれて、舞台裏で何が起こっているのかについても良いアイデアを提供します。
ジェネレーター
ジェネレーター(「Iter Factory」とも呼ばれます)は、特定の反復を作成するために使用される新しいタイプのJavaScript関数です。コンテンツをループする特別なカスタム方法を提供します。
わかりました、それはどういう意味ですか?例を見てみましょう。関数が必要であり、それを呼ぶたびに、次の素数が与えられるとします:
for (var i = 0; i < foo.length; i++) { // 对i执行某些操作 }
別の奇妙な部分は、収量キーワードです。これは、実際に発電機がそれを呼ぶときに吐き出すものです。返すのはほぼ同等ですが、呼び出されるたびにすべてを再実行するのではなく、関数の状態を保持します。実行時にその位置を「覚えている」ので、次にそれを呼ぶとき、それは割り込みから続きます。
これは、これを行うことができることを意味します:
for (const i of foo) { // 对i执行某些操作 }
function isPrime(number) { if (number <= 1) { return false; } else if (number === 2) { return true; } for (var i = 2; i < number; i++) { if (number % i === 0) { return false; break; } } return true; }
ここで、完了キーは、関数がタスクを完了したかどうかを示します。私たちの場合、私たちの機能は決して終わりません。これにより、理論的にはすべての素数が無限まで与えます(コンピューターメモリがたくさんある場合)。
var possiblePrimes = [73, 6, 90, 19, 15]; var confirmedPrimes = []; for (var i = 0; i < possiblePrimes.length; i++) { if (isPrime(possiblePrimes[i])) { confirmedPrimes.push(possiblePrimes[i]); } } // confirmedPrimes现在是[73, 19]
かっこいいので、今すぐ発電機とイテレーターを使用できますか?
結論
ジェネレーターとイテレーターは、JavaScriptの問題へのアプローチに対して非常に多くの新しい柔軟性を提供します。イテレーターを使用すると、ループをよりPythonのような方法で書き込むことができます。つまり、コードはよりクリーンで読みやすく見えます。
ジェネレーター関数を使用すると、最後に見られた場所を覚えている関数を記述し、割り込みから実行を継続できます。また、実際に覚えていることの点で無限になることもありますが、場合によっては非常に便利です。
これらのジェネレーターとイテレーターのサポートは良いです。インターネットエクスプローラーを除き、ノードおよびすべての最新のブラウザでサポートされています。古いブラウザをサポートする必要がある場合は、最良の方法はBabelのような翻訳者を使用することです。
ECMAScript 2015ジェネレーターとイテレーター(FAQ)に関する FAQ
ecmascript 2015の反復因子とジェネレーターの違いは何ですか? iteratorsとジェネレーターはどちらもECMAScript 2015の機能であり、データフローの処理に使用されます。イテレーターは、プログラマーがコレクション内のすべての要素を反復することを可能にするオブジェクトです。次のアイテムをシーケンスで返す次の()メソッドがあります。一方、ジェネレーターは、途中で停止してから停止から続行できる関数です。言い換えれば、発電機は関数のように見えますが、イテレーターのように動作します。
ECMAScript 2015の次の()メソッドの目的は何ですか? eviedキーワードは、ecmascript 2015の一時停止および復元ジェネレーター関数(関数*またはレガシージェネレーター関数)に使用されます。利回りは、ジェネレーター関数から値を返すことができます。この返品値は通常、値と完了の2つのプロパティを持つオブジェクトです。値属性は、降伏式を計算した結果であり、完了は、発電機が最後の値を生成したかどうかを示すブール値です。
ecmascript 2015では、次の()メソッドを使用してオブジェクトを定義することにより、カスタムイテレーターを作成できます。この方法は、値と完了の2つのプロパティを持つオブジェクトを返す必要があります。値属性は反復シーケンスの次の値であり、実行されたものは、反復が完了したかどうかを示すブール値です。
ecmascript 2015のsymbol.iteratorの役割は何ですか?
Symbol.iteratorは、ECMAScript 2015の特別な組み込みシンボルです。オブジェクトのデフォルトのイテレータを指定するために使用されます。オブジェクトを繰り返す必要がある場合(たとえば、loopのforの先頭に)、その@@ iteratorメソッドは引数なしで呼び出され、返されたイテレーターは値を繰り返すために使用します。 ECMAScript 2015でジェネレーター関数の例を提供できますか?
もちろん、これはECMAScript 2015のジェネレーター関数の簡単な例です。
この例では、IDMaker関数は、一連の数字を生成するジェネレーターです。 for (var i = 0; i < foo.length; i++) {
// 对i执行某些操作
}
ログイン後にコピーログイン後にコピーログイン後にコピー
ECMAScript 2015でThro()メソッドとジェネレーターを使用する方法は?
ECMAScript 2015のTHRO()メソッドをジェネレーターで使用して、発電機関数の実行を復元し、降伏式からエラーを投げることができます。 Thro()メソッドは、発電機関数の実行中に発生するエラーを処理するために使用できます。
ECMAScript 2015 IteratorのDONE属性の重要性は何ですか?
実行されたプロパティは、ECMAScript 2015のIteratorによって返されるブール値です。 Iteratorがより多くの値を返すかどうかを示します。完了した場合、イテレーターは反復シーケンスの終了を超えています。完了した場合、イテレーターはさらに多くの値を生成できます。 以上がES6ジェネレーターとイテレーター:開発者ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。
ecmascript 2015のsymbol.iteratorの役割は何ですか?
Symbol.iteratorは、ECMAScript 2015の特別な組み込みシンボルです。オブジェクトのデフォルトのイテレータを指定するために使用されます。オブジェクトを繰り返す必要がある場合(たとえば、loopのforの先頭に)、その@@ iteratorメソッドは引数なしで呼び出され、返されたイテレーターは値を繰り返すために使用します。
ECMAScript 2015でジェネレーター関数の例を提供できますか?
もちろん、これはECMAScript 2015のジェネレーター関数の簡単な例です。
この例では、IDMaker関数は、一連の数字を生成するジェネレーターです。for (var i = 0; i < foo.length; i++) { // 对i执行某些操作 }
ECMAScript 2015でThro()メソッドとジェネレーターを使用する方法は?
ECMAScript 2015のTHRO()メソッドをジェネレーターで使用して、発電機関数の実行を復元し、降伏式からエラーを投げることができます。 Thro()メソッドは、発電機関数の実行中に発生するエラーを処理するために使用できます。ECMAScript 2015 IteratorのDONE属性の重要性は何ですか?
実行されたプロパティは、ECMAScript 2015のIteratorによって返されるブール値です。 Iteratorがより多くの値を返すかどうかを示します。完了した場合、イテレーターは反復シーケンスの終了を超えています。完了した場合、イテレーターはさらに多くの値を生成できます。
以上がES6ジェネレーターとイテレーター:開発者ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

この記事の視差スクロールと要素のアニメーション効果の実現に関する議論では、Shiseidoの公式ウェブサイト(https://www.shisido.co.co.jp/sb/wonderland/)と同様の達成方法について説明します。

JavaScriptを学ぶことは難しくありませんが、挑戦的です。 1)変数、データ型、関数などの基本概念を理解します。2)非同期プログラミングをマスターし、イベントループを通じて実装します。 3)DOM操作を使用し、非同期リクエストを処理することを約束します。 4)一般的な間違いを避け、デバッグテクニックを使用します。 5)パフォーマンスを最適化し、ベストプラクティスに従ってください。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

同じIDを持つ配列要素をJavaScriptの1つのオブジェクトにマージする方法は?データを処理するとき、私たちはしばしば同じIDを持つ必要性に遭遇します...

フロントエンドのVSCodeと同様に、パネルドラッグアンドドロップ調整機能の実装を調べます。フロントエンド開発では、VSCODEと同様のVSCODEを実装する方法...
