| [ Web Proxy ] |
| Viewing: https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Operators/yield* | [Back] [Original] |
Get to know MDN better
Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.
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.
Une expression yield* est utilise afin de dlguer le mcanisme d'itration/gnration un autre gnrateur ou un autre objet itrable.
function* func1() {
yield 42;
}
function* func2() {
yield* func1();
}
const iterator = func2();
console.log(iterator.next().value);
// Expected output: 42
yield * expression;
expressionL'expression qui renvoie un objet itrable.
L'expression yield* itre sur l'oprande et gnre chaque valeur gnre par l'oprande.
La valeur de l'expression yield* est la valeur renvoye par l'itrateur lorsque celui est termin (la proprit done vaut true).
Dans le code suivant, les valeurs gnres par g1() sont renvoyes grce aux appels la fonction next(), comme pour celles renvoyes par g2().
function* g1() {
yield 2;
yield 3;
yield 4;
}
function* g2() {
yield 1;
yield* g1();
yield 5;
}
var iterator = g2();
console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: 3, done: false }
console.log(iterator.next()); // { value: 4, done: false }
console.log(iterator.next()); // { value: 5, done: false }
console.log(iterator.next()); // { value: undefined, done: true }
yield* peut galement tre utilis avec d'autres sortes d'itrables (chanes, tableaux ou arguments) :
function* g3() {
yield* [1, 2];
yield* "34";
yield* Array.from(arguments);
}
var iterator = g3(5, 6);
console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: "3", done: false }
console.log(iterator.next()); // { value: "4", done: false }
console.log(iterator.next()); // { value: 5, done: false }
console.log(iterator.next()); // { value: 6, done: false }
console.log(iterator.next()); // { value: undefined, done: true }
yield* est une expression et non une instruction, elle est donc value et fournit une valeur :
function* g4() {
yield* [1, 2, 3];
return "toto";
}
var rsultat;
function* g5() {
rsultat = yield* g4();
}
var iterator = g5();
console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: 3, done: false }
console.log(iterator.next()); // { value: undefined, done: true }, g4() renvoie{ value: "toto", done: true } at this point
console.log(rsultat); // "toto"
| Spcification |
|---|
| ECMAScript 2027 LanguageSpecification # sec-generator-function-definitions-runtime-semantics-evaluation |
function*function*yieldCette page a t modifie le 22 mai 2026 par les contributeurices du MDN.
Certaines parties de ce contenu sont protges par le droit d'auteur 19982026 des contributeurs individuels de mozilla.org. Contenu disponible sous une licence Creative Commons.
| Web Proxy Viewer | New URL | Original Page |