★ wanayoo — archive 1999 https://developer.mozilla.org/ca/docs/Web/JavaScript/Reference/Operators/yieldNouvelle recherche | Portail wanayoo
mozilla
Your Search Results

    yield

    This article is in need of an editorial review.

    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.
    Draft 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: enTropy
    Last updated by: enTropy,