Movatterモバイル変換


[0]ホーム

URL:


  1. Web
  2. JavaScript
  3. Référence JavaScript
  4. Expressions et opérateurs
  5. yield

Cette page a été traduite à partir de l'anglais par la communauté.Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in EnglishAlways switch to English

yield

Baseline Widely available

Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis ⁨septembre 2016⁩.

Le mot-cléyield est utilisé pour suspendre et reprendre une fonction génératrice (function* ouune fonction génératrice historique).

Exemple interactif

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

Syntaxe

js
[rv] = yield[expression];
expression

Définit la valeur à retourner depuis la fonction génératrice viale protocole itérateur. Si omise,undefined sera retournée à la place.

rv

Retourne la valeur optionnelle passée à la méthodenext() pour reprendre son exécution.

Description

Le mot-cléyield suspend une fonction génératrice et la valeur de l'expression suivant le mot-cléyield est retournée à l'appelant du générateur. Il peut être vu comme une version générateur du mot-cléreturn.

Le mot-cléyield ne peut être appelé qu'à partir de la fonction génératrice qui le contient. Il ne peut pas être utilisé depuis des fonctions imbriquées ou avec descallbacks.

Le mot-cléyield retourne en fait un objetIteratorResult ayant deux propriétés,value etdone. La propriétévalue est le résultat de l'évaluation de l'expressionyield, etdone estfalse, indiquant que la fonction génératrice n'est pas complètement terminée.

Une fois suspendue sur une expressionyield, l'exécution du code du générateur reste suspendue jusqu'à ce que la méthodenext() du générateur soit appelée. Chaque fois que la méthodenext() du générateur est appelée, le générateur reprend l'exécution et s'exécute jusqu'à ce qu'elle atteigne l'une des situations suivantes :

  • unyield, ce qui provoque une nouvelle pause du générateur et retourne la nouvelle valeur du générateur ; la prochaine fois quenext() sera appelé, l'exécution reprendra à l'instruction immédiatement après leyield ;
  • throw est utilisé pour déclencher une exception depuis le générateur ; cela arrête entièrement l'exécution du générateur et l'exécution reprend dans l'appelant, comme c'est normalement le cas lorsqu'une exception est déclenchée ;
  • la fin de la fonction génératrice est atteinte ; dans ce cas, l'exécution du générateur se termine et unIteratorResult est retourné à l'appelant, dans lequel la valeur estundefined etdone esttrue ;
  • une instructionreturn est atteinte ; dans ce cas, l'exécution du générateur se termine et unIteratorResult est retourné à l'appelant dans lequel lavalue est la valeur spécifiée par l'instructionreturn etdone vauttrue.

Si une valeur optionnelle est passée à la méthodenext() du générateur, cette valeur devient la valeur retournée par l'opérationyield en cours du générateur.

Entre le chemin de code du générateur, ses opérateursyield, et la possibilité de spécifier une nouvelle valeur de départ en la passant àGenerator.prototype.next(), les générateurs offrent énormément de puissance et de contrôle.

Exemples

Le code suivant est la déclaration d'un exemple de fonction génératrice :

js
function* compteVentesPommes() {  var listeVentes = [3, 7, 5];  for (var i = 0; i < listeVentes.length; i++) {    yield listeVentes[i];  }}

Une fois qu'une fonction génératrice est définie, elle peut être utilisée en construisant un itérateur comme indiqué.

js
var magasinPommes = compteVentesPommes(); // Générateur { }console.log(magasinPommes.next()); // { value: 3, done: false }console.log(magasinPommes.next()); // { value: 7, done: false }console.log(magasinPommes.next()); // { value: 5, done: false }console.log(magasinPommes.next()); // { value: undefined, done: true }

Spécifications

Specification
ECMAScript® 2026 Language Specification
# prod-YieldExpression

Compatibilité des navigateurs

Voir aussi

Help improve MDN

Learn how to contribute

Cette page a été modifiée le par lescontributeurs du MDN.


[8]ページ先頭

©2009-2025 Movatter.jp