We're looking for a user researcher to understand the needs of developers and designers. Is this you or someone you know? Check out the post: https://mzl.la/2IGzdXS

Resum

La paraula clau yield s'utilitza per a pausar i reprendre una funció generadora (function* o bé una funció generadora obsoleta).

Sintaxi

 yield [[expressió]];
expressió
La expresssió a retornar. Si s'omet es retorna undefined.

Descripció

La paraula clau yield causa que l'execució d'una funció generadora es pausi i retorni el valor de l'expressió que la segueix. La paraula clau yield es pot entendre com una versió de la paraula clau return per a generadors.

La paraula clau yield retorna en realitat un objecte de tipus IteratorResult amb dues propietats: value i done. La propietat value és el resultat d'evaluar l'expresssió que segueix yield mentre que la propietat done és de tipus booleà i indica si la funció generadora ha completat la seva execució o no.

Un cop pausada mitjançant una expressió yield, l'execució de codi del generador no es reprendrà a no ser que s'invoqui externament mitjançant la crida a la funció next() del generador. Això permet un control directe de l'execució del generador i valors de retorn incrementals.

Exemples

El següent codi és un exemple de la declaració d'una funció generadora al llarg d'una funció d'ajut.

function* foo(){
  var index = 0;
  while (index <= 2) // quan index arriba a 3, 
                     // la propietat done del yield serà true 
                     // i el seu valor serà undefined;
    yield index++;
}

Un cop la funció generadora és definida es pot utilitzar tot construïnt un iterador tal i com es mostra a continuació:

var iterator = foo();
console.log(iterator.next()); // { value:0, done:false }
console.log(iterator.next()); // { value:1, done:false }
console.log(iterator.next()); // { value:2, done:false }
console.log(iterator.next()); // { value:undefined, done:true }

Especificacions

Especificació Estat Comentaris
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Yield' in that specification.
Standard Definició inicial

Compatibilitat amb navegadors

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!

Característica Chrome Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Suport bàsic 39 26.0 (26.0) ? ? ?
Objecte IteratorResult en comptes de throwing ? 29.0 (29.0) ? ? ?
Característica Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Suport bàsic yes (when?) 26.0 (26.0) ? ? ?
Objecte IteratorResult en comptes de throwing ? 29.0 (29.0) ? ? ?

Notes específiques per a Firefox

  • A partir de Gecko 29 (Firefox 29 / Thunderbird 29 / SeaMonkey 2.26) la funció generadora, un cop completada, no llença un TypeError "generator has already finished" sino que retorna un objecte de tipus IteratorResult com per exemple { value: undefined, done: true } (errada 958951).
  • A partir de Gecko 33 (Firefox 33 / Thunderbird 33 / SeaMonkey 2.30) l'anàlisi de l'expressió que segueix al yield s'ha actualitzat per a satisfer l'especificació de ES6 (errada 981599):
    • L'expressió que segueix la paraula clau yield és opcional i si s'omet ja no es llença SyntaxError: function* foo() { yield; }

Vegeu tambè

Document Tags and Contributors

Contributors to this page: teoli, enTropy
Last updated by: teoli,