--- title: yield slug: Web/JavaScript/Reference/Operators/yield translation_of: Web/JavaScript/Reference/Operators/yield original_slug: Web/JavaScript/Referencia/Operadors/yield ---
La paraula clau yield s'utilitza per a pausar i reprendre una funció generadora ({{jsxref("Statements/function*", "function*")}} o bé una funció generadora obsoleta).
yield [[expressió]];
expressióundefined.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.
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 }
| Especificació | Estat | Comentaris |
|---|---|---|
| {{SpecName('ES6', '#', 'Yield')}} | {{Spec2('ES6')}} | Definició inicial |
{{CompatibilityTable}}
| Característica | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
|---|---|---|---|---|---|
| Suport bàsic | 39 | {{CompatGeckoDesktop("26.0")}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} |
Objecte IteratorResult en comptes de throwing |
{{CompatUnknown}} | {{CompatGeckoDesktop("29.0")}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} |
| Característica | Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|
| Suport bàsic | yes (when?) | {{CompatGeckoMobile("26.0")}} | {{CompatUnknown}} | {{ CompatUnknown}} | {{CompatUnknown}} |
Objecte IteratorResult en comptes de throwing |
{{CompatUnknown}} | {{CompatGeckoMobile("29.0")}} | {{CompatUnknown}} | {{CompatUnknown}} | {{CompatUnknown}} |
IteratorResult com per exemple { value: undefined, done: true } ({{bug(958951)}}).function* foo() { yield; }