--- title: yield slug: Web/JavaScript/Reference/Operators/yield tags: - ECMAScript 2015 - Generators - Iterator - JavaScript - Operador - Operator translation_of: Web/JavaScript/Reference/Operators/yield ---
{{jsSidebar("Operators")}}

A palavra-chave yield é usada para pausar e resumir uma generator function ({{jsxref("Statements/function*", "function*")}} or generator function legada).

Sintaxe

[rv] = yield [expressão];
expressão
Define o valor que retorna de uma generator function via o protocolo iterator. Se omitido, será retornado undefined.
rv

Retorna o valor opcional passado para o metódo next() do generator e resume sua execução.

Descrição

A palavra-chave yield pausa a execução de uma generator function e o valor da expressão em frente a palavra-chave yield é retornado para a chamada do generator. Ele pode ser considerado uma versão da palavra-chave return para o generator.

A palavra-chave yield atualmente retorna um objeto do tipo IteratorResult com duas propriedades, value e done. A propriedade value é o resultado da avaliação da expressão yield, e done é false, indicando que a generator function não foi totalmente completada.

Uma vez pausado em uma expressão yield, a execução do código do generator permanece pausado até a próxima chamada do métod next(). Cada vez que o método next() do generator é chamado, o generator resume a execução e roda até atingir um dos seguintes estados:

Se um valor opcional é passado para o método next() do generator, esse valor se torna o valor retornado pela operação yield atual do generator.

Entre o caminho de código do generator, os seus operadores yield, e a habilidade de especificar um novo valor inicial passando isso para o {{jsxref("Generator.prototype.next()")}}, generators oferecem um poder e controle enormes

Exemplos

O código seguinte é a declaração de um exemplo de uma generator function.

function* foo() {
  var index = 0;
  while (index <= 2)
    yield index++;
}

Uma vez que a generator function é definida, isso pode ser usada para construir um iterator como mostrado a seguir: 

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 }

Especificações

Especificação Situação Comentário
{{SpecName('ES2015', '#', 'Yield')}} {{Spec2('ES2015')}} Definição inicial.
{{SpecName('ESDraft', '#', 'Yield')}} {{Spec2('ESDraft')}}  

Compatibilidade com navegadores

{{CompatibilityTable}}

Feature Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari (WebKit)
Basic support 39 {{CompatVersionUnknown}} {{CompatGeckoDesktop("26.0")}} {{CompatUnknown}} {{CompatUnknown}} {{CompatSafari("10")}}
IteratorResult object instead of throwing {{CompatUnknown}} {{CompatUnknown}} {{CompatGeckoDesktop("29.0")}} {{CompatUnknown}} {{CompatUnknown}} {{CompatSafari("10")}}
Feature Android Edge Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support {{CompatVersionUnknown}} {{CompatVersionUnknown}} {{CompatGeckoMobile("26.0")}} {{CompatUnknown}} {{ CompatUnknown}} {{CompatSafari("10")}}
IteratorResult object instead of throwing {{CompatUnknown}} {{CompatUnknown}} {{CompatGeckoMobile("29.0")}} {{CompatUnknown}} {{CompatUnknown}} {{CompatSafari("10")}}

Notas específicas do Firefox

Veja também