Movatterモバイル変換


[0]ホーム

URL:


  1. Tecnologia Web para desenvolvedores
  2. JavaScript
  3. Referência JavaScript
  4. Operadores
  5. yield*

Esta página foi traduzida do inglês pela comunidade.Saiba mais e junte-se à comunidade MDN Web Docs.

View in EnglishAlways switch to English

yield*

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⁩.

Aexpressãoyield* é usada para delegar para outro objetogenerator ou iterable.

Sintaxe

 yield* [[expressão]];
expressão

A expressão que retorna um objeto iterable.

Descrição

A expressãoyield* itera sobre a operação e yields cada valor retornado por ele.

O valor da expressãoyield* sozinha é o valor retornado pelo iterator quando ele for fechado (i.e., quandodone étrue).

Exemplos

Delegando para outro generator

No código seguinte, valores "yeldados" porg1() são retornados pornext() chamam apenas os que foram "yeldados" porg2().

js
function* g1() {  yield 2;  yield 3;  yield 4;}function* g2() {  yield 1;  yield* g1();  yield 5;}var iterator = g2();console.log(iterator.next()); // {value: 1, done: false}console.log(iterator.next()); // {value: 2, done: false}console.log(iterator.next()); // {value: 3, done: false}console.log(iterator.next()); // {value: 4, done: false}console.log(iterator.next()); // {value: 5, done: false}console.log(iterator.next()); // {value: undefined, done: true}

Outros objetos Iterables

Além de objetos generator,yield* também podemyield outros tipos de objetos iterables, e.g. arrays, strings ou objetos de argumentos.

js
function* g3() {  yield* [1, 2];  yield* "34";  yield* Array.from(arguments);}var iterator = g3(5, 6);console.log(iterator.next()); // {value: 1, done: false}console.log(iterator.next()); // {value: 2, done: false}console.log(iterator.next()); // {value: "3", done: false}console.log(iterator.next()); // {value: "4", done: false}console.log(iterator.next()); // {value: 5, done: false}console.log(iterator.next()); // {value: 6, done: false}console.log(iterator.next()); // {value: undefined, done: true}

O valor da expressãoyield* sozinha

yield* é uma expressão, não uma declaração, então ele espera um valor.

js
function* g4() {  yield* [1, 2, 3];  return "foo";}var result;function* g5() {  result = yield* g4();}var iterator = g5();console.log(iterator.next()); // {value: 1, done: false}console.log(iterator.next()); // {value: 2, done: false}console.log(iterator.next()); // {value: 3, done: false}console.log(iterator.next()); // {value: undefined, done: true},// g4() returned {value: 'foo', done: true} nesse pontoconsole.log(result); // "foo"

Especificações

Specification
ECMAScript® 2026 Language Specification
# sec-generator-function-definitions-runtime-semantics-evaluation

Compatibilidade com navegadores

Notas específicas do Firefox

  • A partir do Gecko 33, o tratamento da expressão yield foi atualizado para se conformar com a espeficação do ES2015 (Erro do Firefox 981599):
    • A restrição de linha finalizadora agora está implementada. Nenhuma linha finalizadora entre "yield" e "*" é permitida. Código como o a seguir irá invocar uma exceptionSyntaxError:

      js
      function* foo() {  yield  *[];}

Veja também

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp