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
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 tipusIteratorResult
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; }
- L'expressi贸 que segueix la paraula clau yield 茅s opcional i si s'omet ja no es llen莽a SyntaxError: