yield

Resum

La paraula clau yield s'utilitza per a pausar i reprendre una funci贸 generadora (function* (en-US) 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! (en-US)

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猫