Movatterモバイル変換


[0]ホーム

URL:


  1. Tecnología web para desarrolladores
  2. JavaScript
  3. Referencia de JavaScript
  4. Expresiones y operadores
  5. yield

Esta página ha sido traducida del inglés por la comunidad.Aprende más y únete a la comunidad de 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 ⁨septiembre de 2016⁩.

La palabra claveyield se usa para pausar y reanudar una función generadora (function* ofunción generadora heredada).

Pruébalo

function* foo(index) {  while (index < 2) {    yield index;    index++;  }}const iterator = foo(0);console.log(iterator.next().value);// Expected output: 0console.log(iterator.next().value);// Expected output: 1

Sintaxis

[rv] = yield [expression]
expressionOpcional

Define el valor que se devolverá desde la función generadora a través delprotocolo iterador. Si se omite, devuelveundefined en su lugar.

rvOpcional

Recupera el valor opcional pasado al métodonext() del generador para reanudar su ejecución.

Descripción

La palabra claveyield detiene la ejecución de la función del generador y el valor de la expresión que sigue a la palabra claveyield se devuelve al llamador del generador. Se puede considerar como una versión basada en un generador de la palabra clavereturn.

yield solo se puede llamar directamente desde la función generadora que la contiene. No se puede llamar desde funciones anidadas o retrollamadas.

La palabra claveyield hace que la llamada al métodonext() del generador devuelva un objetoIteratorResult con dos propiedades:value ydone. La propiedadvalue es el resultado de evaluar la expresiónyield, ydone esfalse, lo cual indica que la función generadora no se ha completado completamente.

Una vez en pausa en una expresiónyield, la ejecución del código del generador permanece en pausa hasta que se llama al métodonext() del generador. Cada vez que se llama al métodonext() del generador, el generador reanuda la ejecución y se ejecuta hasta que alcanza uno de los siguientes:

  • Unyield, el cual hace que el generador vuelva a pausar y devuelva el nuevo valor del generador. La próxima vez que se llame anext(), la ejecución se reanudará con la instrucción inmediatamente después deyield.
  • throw se usa para lanzar una excepción desde el generador. Esta detiene la ejecución del generador por completo y la ejecución se reanuda en el llamador (como suele ser el caso cuando se lanza una excepción).
  • Se alcanza el final de la función generadora. En este caso, la ejecución del generador finaliza y se devuelve unIteratorResult al llamador en el que elvalue esundefined ydone estrue.
  • Se alcanza una instrucciónreturn. En este caso, la ejecución del generador finaliza y se devuelve unIteratorResult al llamador en el que elvalue es el valor especificado por la instrucciónreturn ydone estrue.

Si se pasa un valor opcional al métodonext() del generador, ese valor se convierte en el valor devuelto por la operaciónyield actual del generador.

Entre la ruta del código del generador, sus operadoresyield y la capacidad de especificar un nuevo valor inicial pasándolo aGenerator.prototype.next(), los generadores ofrecen enorme poder y control.

Advertencia:Desafortunadamente,next() es asimétrico, pero eso no se puede evitar: siempre envía un valor alyield actualmente suspendido, pero devuelve el operando del siguienteyield.

Ejemplos

Usaryield

El siguiente código es la declaración de una función generadora de ejemplo.

js
function* countAppleSales() {  let saleList = [3, 7, 5];  for (let i = 0; i < saleList.length; i++) {    yield saleList[i];  }}

Una vez que se define una función generadora, se puede usar construyendo un iterador como el siguiente.

js
let appleStore = countAppleSales(); // Generator { }console.log(appleStore.next()); // { value: 3, done: false }console.log(appleStore.next()); // { value: 7, done: false }console.log(appleStore.next()); // { value: 5, done: false }console.log(appleStore.next()); // { value: undefined, done: true }

También puedes enviar un valor connext(value) al generador. 'step' se evalúa como un valor de retorno en esta sintaxis [rv] =yield [expression]

js
function* counter(value) {  let step;  while (true) {    step = yield ++value;    if (step) {      value += step;    }  }}const generatorFunc = counter(0);console.log(generatorFunc.next().value); // 1console.log(generatorFunc.next().value); // 2console.log(generatorFunc.next().value); // 3console.log(generatorFunc.next(10).value); // 14console.log(generatorFunc.next().value); // 15console.log(generatorFunc.next(10).value); // 26

Especificaciones

Specification
ECMAScript® 2026 Language Specification
# prod-YieldExpression

Compatibilidad con navegadores

Ve también

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp