Wie wir alle wissen, ist JavaScript eine leichtgewichtige Programmiersprache und Generatoren wurden in ECMAScript 2015 eingeführt. Ein Generator ist ein Prozess, der viele Ausgabewerte hat und gestoppt und gestartet werden kann. In JavaScript bestehen Generatoren aus Generatorfunktionen, die eine Iteration von Generatorobjekten erzeugen.
In diesem Artikel besprechen wir Generatoren in JavaScript und die verschiedenen Arten von Generatoren in JavaScript ausführlich mit Syntax und Beispielen.
Die Generatorfunktion ist die gleiche wie die reguläre Funktion, mit einem Unterschied kann die Generatorfunktion jedoch fortgesetzt und angehalten werden. Im Allgemeinen werden Funktionen in JavaScript nicht beendet, sobald sie aufgerufen werden. Typischerweise taucht das Konzept der Generatoren in der asynchronen Programmierung auf.
Jetzt besprechen wir die Syntax von Generatorfunktionen in JavaScript und vergleichen sie mit regulären Funktionen.
Diefunction *-Syntax wird zum Erstellen von Generatorfunktionen verwendet und das Schlüsselwort yield wird zum Anhalten dieser Funktionen verwendet.
function * genFunc() { yield 'Hello'; yield 'World'; } const g = genFunc(); // g is a generator g.next(); // { value: 'Hello', done: false } g.next(); // { value: 'World', done: false } g.next(); // { value: undefined, done: true } …
Wenn eine Generatorfunktion zum ersten Mal aufgerufen wird, wird kein Code ausgeführt, sondern ein Generatorobjekt zurückgegeben. Werte werden durch den Aufruf der next()-Methode des Generators verbraucht, die den Code ausführt, bis er auf das Schlüsselwort yield stößt. An diesem Punkt pausiert er und wartet, bis next() erneut aufgerufen wird.
Im obigen Code erzeugen nach unserer letzten Anweisung aufeinanderfolgende Aufrufe von g.next() einfach dasselbe Rückgabeobjekt: {value: undefined, did: true}, weil wir uns in der „Welt“ unseres Codes „Nothing“ befinden wird danach definiert. genFunc()-Funktion.
Das Schlüsselwortyield unterbricht die Ausführung einer Generatorfunktion und stellt dem Aufrufer des Generators den Wert des darauf folgenden Ausdrucks bereit. Es ist vergleichbar mit der Generator-basierten Version des Schlüsselworts return. Kann nur direkt von einer Generatorfunktion aufgerufen werden, die yield enthält.
function regFunc() { console.log("Hello World"); } // Hello World
In regulären Funktionen verwenden wir nicht die Funktion „*“ und wie Sie im obigen Beispiel sehen können, wird auch die Funktion yield nicht verwendet. Wie wir oben besprochen haben, besteht der Hauptunterschied zwischen regulären Funktionen und Generatorfunktionen darin, dass Generatorfunktionen gestoppt und angehalten werden können. Aus dem obigen Beispiel können Sie sehen, dass wir uns nicht dafür entschieden haben, es zu stoppen, sondern direkt die gesamte Anweisung gedruckt haben, nämlich „Hallo Welt“.
Da wir die Grundlagen der Generatorfunktionen verstanden haben, gehen wir nun zu den verschiedenen Arten von Generatorfunktionen über -
In einem normalen Generator fungiert der Generator als Iterator und generiert den nächsten Wert, nachdem jeder Aufruf der next()-Methode ausgeführt wurde, um die Funktion zu generieren. Schauen wir uns ein Beispiel an, in dem wir Zahlen nacheinander bis zum Ende der Liste generieren.
function* generator_function(){ for(var cur = 0 ; cur<7; cur++){ yield cur; } } var object_generator = generator_function(); console.log(object_generator.next().value); console.log(object_generator.next().value); console.log(object_generator.next().value); console.log(object_generator.next().value); console.log(object_generator.next().value); console.log(object_generator.next().value); console.log(object_generator.next().value);
Im obigen Code haben wir eine normale generische Funktion erstellt, die das Schlüsselwort yield enthält, und sie mehrmals mit der Funktion next() aufgerufen.
Generatoren mit Parametern unterscheiden sich ein wenig von normalen Generatoren. Dieses Mal müssen wir einen Parameter mit der Funktion next() übergeben, um ihn an die Generatorfunktion zu senden. Außerdem wird jedes Mal, wenn wir einen Parameter übergeben, dieser nach dem Schlüsselwort yield und nicht davor gespeichert. Wir werden dieses Konzept in den folgenden Beispielen verstehen -
function* generator_function(){ console.log("start of the function") temp = yield; console.log("This is the first value passed: " + temp) temp = yield; console.log("This is the second value passed: " + temp) } var object_generator = generator_function(); object_generator.next("This is not the first "); object_generator.next("this is first"); object_generator.next("this is second"); object_generator.next();
Im obigen Code haben wir die Generatorfunktion definiert und dieses Mal die Parameter an sie übergeben. Wenn wir das Objekt zum ersten Mal aufrufen, werden die angegebenen Parameter nicht gedruckt, da diese vor dem Schlüsselwort „yield“ gesendet werden und dann, nachdem der gesendete Wert in der Variablen gespeichert und gedruckt wurde, der Wert das zweite Mal gedruckt wird. Danach wird Es passiert nichts, da derzeit keine Ausgabe erfolgt.
Generatoren können als Objekte verwendet werden und wenn wir sie aufrufen, geben sie einfach den ihnen zugewiesenen Wert zurück und können gedruckt werden. Um dieses Konzept zu verstehen, schauen wir uns ein Beispiel an.
function* generator_function(){ yield "First value" yield "Second value" yield "Third value" } var object_generator = generator_function(); console.log(object_generator.next().value); console.log(object_generator.next().value); console.log(object_generator.next().value);
Im obigen Code definieren wir zunächst drei Ertragsausdrücke, und nach ihnen gibt es eine Zeichenfolge. Wenn wir den Generator aufrufen, wird die Zeichenfolge nach ihnen zurückgegeben.
Es gibt auch andere Arten von Generatoren, z. B. Rücklauftypen, einige Generatoren enthalten einen weiteren Generator usw.
In dem Artikel haben wir erfahren, dass die Generatorfunktion mit der regulären Funktion identisch ist, mit einem Unterschied jedoch, dass die Generatorfunktion fortgesetzt und angehalten werden kann. Im Allgemeinen werden Funktionen in JavaScript nicht beendet, sobald sie aufgerufen werden. Typischerweise taucht das Konzept der Generatoren in der asynchronen Programmierung auf. Es gibt viele Arten von Generatoren, z. B. gewöhnliche Generatoren mit Objekten wie Parametern und Eigenschaften, Generatoren, die einen anderen Generator enthalten usw.
Das obige ist der detaillierte Inhalt vonErklären Sie die verschiedenen Generatortypen in JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!