Please note, this is a STATIC archive of website developer.mozilla.org from 03 Nov 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

yield

This article needs an editorial review. How you can help.

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 6 (ECMA-262)
The definition of 'Yield' in that specification.
Release Candidate Definició inicial

Compatibilitat amb navegadors

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,