Esta página foi traduzida do inglês pela comunidade.Saiba mais e junte-se à comunidade MDN Web Docs.
Generator
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since setembro de 2016.
O objetoGenerator é retornado porgenerator function e conformeiterable protocol e oiterator protocol.
In this article
Síntaxe
function* gen() { yield 1; yield 2; yield 3;}var g = gen(); // "Generator { }"Métodos
Generator.prototype.next()Retorna o valor fornecido pela expressão
yield.Generator.prototype.return()Retorna o valor fornecido a finaliza o generator.
Generator.prototype.throw()Lança um erro no generator.
Example
>An infinite iterator
function* idMaker() { var index = 0; while (true) yield index++;}var gen = idMaker(); // "Generator { }"console.log(gen.next().value); // 0console.log(gen.next().value); // 1console.log(gen.next().value); // 2// ...Objeto legacy generator
Firefox (SpiderMonkey) também implementa a versão anterior do generator emJavaScript 1.7, onde o asterisco (*) na declaração da função não era necessário (somente era necessário usar a palavra reservadayield no corpo da função). Contudo, legacy generators estão obsoletos. Não os use, eles serão removidos (Erro do Firefox 1083482).
Métodos legacy generator
Generator.prototype.next()Não padrãoRetorna o valor fornecido pela expressão
yield. Isto corresponde aonext()do ES6.Generator.prototype.close()Não padrãoFecha o generator, então quando chamar
next()um erroStopIterationserá lançado. Isto corresponde ao métodoreturn()do ES6.Generator.prototype.send()Não padrãoUsado para enviar um valor para o generator. Este valor é retordo pela expressão
yield, e retorna o valor fornecido pelo pelo nextyield.send(x)corresponde aonext(x)do ES6.Generator.prototype.throw()Não padrãoLança um erro no generator. Isto corresponde ao método
throw() do ES6.
Exemplo do Legacy generator
function* fibonacci() { var a = yield 1; yield a * 2;}var it = fibonacci();console.log(it); // "Generator { }"console.log(it.next()); // 1console.log(it.send(10)); // 20console.log(it.close()); // undefinedconsole.log(it.next()); // throws StopIteration (Como o generator está fechado)Especificações
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-generator-objects> |