Movatterモバイル変換


[0]ホーム

URL:


MDN Web Docs

yield

BaselineWidely available

Theyield operator is used to pause and resume agenerator function.

Try it

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

Syntax

js
yieldyield expression

Parameters

expressionOptional

The value to yield from the generator function viathe iterator protocol. If omitted,undefined is yielded.

Return value

Returns the optional value passed to the generator'snext() method to resume its execution.

Note:This meansnext() is asymmetric: it always sends a value to the currently suspendedyield, but returns the operand of the nextyield. The argument passed to the firstnext() call cannot be retrieved because there's no currently suspendedyield.

Description

Theyield keyword pauses generator function execution and the value of the expression following theyield keyword is returned to the generator's caller. It can be thought of as a generator-based version of thereturn keyword.

yield can only be used directly within the generator function that contains it. It cannot be used within nested functions.

Calling a generator function constructs aGenerator object. Each time the generator'snext() method is called, the generator resumes execution, and runs until it reaches one of the following:

  • Ayield expression. In this case, the generator pauses, and thenext() method return aniterator result object with two properties:value anddone. Thevalue property is the value of the expression after theyield operator, anddone isfalse, indicating that the generator function has not fully completed.
  • The end of the generator function. In this case, execution of the generator ends, and thenext() method returns an iterator result object where thevalue isundefined anddone istrue.
  • Areturn statement. In this case, execution of the generator ends, and thenext() method returns an iterator result object where thevalue is the specified return value anddone istrue.
  • Athrow statement. In this case, execution of the generator halts entirely, and thenext() method throws the specified exception.

Once paused on ayield expression, the generator's code execution remains paused until the generator'snext() method is called again. If an optional value is passed to the generator'snext() method, that value becomes the value returned by the generator's currentyield operation. The firstnext() call does not have a corresponding suspendedyield operation, so there's no way to get the argument passed to the firstnext() call.

If the generator'sreturn() orthrow() method is called, it acts as if areturn orthrow statement was executed at the pausedyield expression. You can usetry...catch...finally within the generator function body to handle these early completions. If thereturn() orthrow() method is called but there's no suspendedyield expression (becausenext() has not been called yet, or because the generator has already completed), then the early completions cannot be handled and always terminate the generator.

Examples

Using yield

The following code is the declaration of an example generator function.

js
function* countAppleSales() {  const saleList = [3, 7, 5];  for (const sale of saleList) {    yield sale;  }}

Once a generator function is defined, it can be used by constructing an iterator as shown.

js
const 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 }

You can also send a value withnext(value) into the generator.step evaluates as a return value of theyield expression — although the value passed to the generator'snext() method the first timenext() is called is ignored.

js
function* counter(value) {  while (true) {    const step = yield value++;    if (step) {      value += step;    }  }}const generatorFunc = counter(0);console.log(generatorFunc.next().value); // 0console.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

Specifications

Specification
ECMAScript® 2026 Language Specification
# prod-YieldExpression

Browser compatibility

See also

Help improve MDN

Learn how to contribute.

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp