Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. JavaScript
  3. JavaScript-Referenz
  4. Ausdrücke und Operatoren
  5. yield

Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.

View in EnglishAlways switch to English

yield

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨September 2016⁩.

Deryield Operator wird verwendet, um eineGeneratorfunktion zu pausieren und fortzusetzen.

Probieren Sie es aus

function* foo(index) {  while (index < 2) {    yield index;    index++;  }}const iterator = foo(0);console.log(iterator.next().value);// Expected output: 0console.log(iterator.next().value);// Expected output: 1

Syntax

js
yieldyield expression

Parameter

expressionOptional

Der Wert, der über dasIterator-Protokoll aus der Generatorfunktion ausgegeben wird. Wenn weggelassen, wirdundefined ausgegeben.

Rückgabewert

Gibt den optionalen Wert zurück, der an dienext() Methode des Generators übergeben wurde, um die Ausführung fortzusetzen.

Hinweis:Das bedeutet,next() ist asymmetrisch: es sendet immer einen Wert an das aktuell angehalteneyield, gibt aber den Operanden des nächstenyield zurück. Der übergebene Wert des erstennext() Aufrufs kann nicht abgerufen werden, da kein aktuell angehaltenesyield existiert.

Beschreibung

Das Schlüsselwortyield pausiert die Ausführung einer Generatorfunktion und der Wert des Ausdrucks nach demyield Schlüsselwort wird an den Aufrufer des Generators zurückgegeben. Es kann als generatorbasierte Version desreturn Schlüsselworts betrachtet werden.

yield kann nur direkt innerhalb der Generatorfunktion verwendet werden, die es enthält. Es kann nicht innerhalb verschachtelter Funktionen verwendet werden.

Der Aufruf einer Generatorfunktion erzeugt einGenerator Objekt. Jedes Mal, wenn dienext() Methode des Generators aufgerufen wird, wird die Generatorausführung fortgesetzt und läuft bis zu einem der folgenden Punkte:

  • Einyield Ausdruck. In diesem Fall pausiert der Generator, und dienext() Methode gibt einIterator-Ergebnis Objekt mit zwei Eigenschaften zurück:value unddone. Die Eigenschaftvalue ist der Wert des Ausdrucks nach demyield Operator, unddone istfalse, was darauf hinweist, dass die Generatorfunktion nicht vollständig abgeschlossen ist.
  • Das Ende der Generatorfunktion. In diesem Fall endet die Ausführung des Generators, und dienext() Methode gibt ein Iterator-Ergebnisobjekt zurück, bei demvalueundefined ist unddonetrue.
  • Einereturn Anweisung. In diesem Fall endet die Ausführung des Generators, und dienext() Methode gibt ein Iterator-Ergebnisobjekt zurück, bei demvalue der angegebene Rückgabewert ist unddonetrue.
  • Einethrow Anweisung. In diesem Fall wird die Ausführung des Generators vollständig gestoppt, und dienext() Methode löst die angegebene Ausnahme aus.

Einmal auf einemyield Ausdruck pausiert, bleibt die Codeausführung des Generators angehalten, bis dienext() Methode des Generators erneut aufgerufen wird. Wenn ein optionaler Wert an dienext() Methode des Generators übergeben wird, wird dieser Wert als Rückgabewert der aktuellenyield Operation des Generators. Der erstenext() Aufruf hat keine entsprechende angehalteneyield Operation, sodass es keine Möglichkeit gibt, das Argument des erstennext() Aufrufs abzurufen.

Wenn diereturn() oderthrow() Methode des Generators aufgerufen wird, wirkt dies, als ob einereturn oderthrow Anweisung am pausiertenyield Ausdruck ausgeführt wurde. Sie könnentry...catch...finally im Körper der Generatorfunktion verwenden, um diese vorzeitigen Abschlüsse zu behandeln. Wenn diereturn() oderthrow() Methode aufgerufen wird, aber kein angehalteneryield Ausdruck vorhanden ist (weilnext() noch nicht aufgerufen wurde oder weil der Generator bereits abgeschlossen ist), dann können die vorzeitigen Abschlüsse nicht behandelt werden und beenden den Generator immer.

Beispiele

Verwendung von yield

Der folgende Code ist die Deklaration einer Beispiel-Generatorfunktion.

js
function* countAppleSales() {  const saleList = [3, 7, 5];  for (const sale of saleList) {    yield sale;  }}

Sobald eine Generatorfunktion definiert ist, kann ein Iterator wie folgt erstellt werden.

js
const appleStore = countAppleSales(); // Generator { }console.log(appleStore.next()); // { value: 3, done: false }console.log(appleStore.next()); // { value: 7, done: false }console.log(appleStore.next()); // { value: 5, done: false }console.log(appleStore.next()); // { value: undefined, done: true }

Sie können auch einen Wert mitnext(value) in den Generator senden.step wird als Rückgabewert desyield Ausdrucks ausgewertet — obwohl der an dienext() Methode des Generators übergebene Wert beim ersten Aufruf vonnext() ignoriert wird.

js
function* counter(value) {  while (true) {    const step = yield value++;    if (step) {      value += step;    }  }}const generatorFunc = counter(0);console.log(generatorFunc.next().value); // 0console.log(generatorFunc.next().value); // 1console.log(generatorFunc.next().value); // 2console.log(generatorFunc.next().value); // 3console.log(generatorFunc.next(10).value); // 14console.log(generatorFunc.next().value); // 15console.log(generatorFunc.next(10).value); // 26

Spezifikationen

Specification
ECMAScript® 2026 Language Specification
# prod-YieldExpression

Browser-Kompatibilität

Siehe auch

Help improve MDN

Learn how to contribute Diese Seite wurde automatisch aus dem Englischen übersetzt.

[8]ページ先頭

©2009-2025 Movatter.jp