このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

Generator.prototype.next()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2016年9月.

next()Generator インスタンスのメソッドで、2 つのプロパティ donevalue を持つオブジェクトを返します。 next メソッドに引数を提供して、ジェネレーターへ値を送ることもできます。

構文

js
next()
next(value)

引数

value 省略可

ジェネレーターへ送る値です。

この値は yield 式の結果として代入されます。例えば variable = yield expression の場合、 .next() 関数に渡された値は variable に代入されます。

返値

以下の 2 つのプロパティを持った Object です。

done

論理値です。

  • イテレーターが反復処理の末尾を過ぎている場合、値は true になります。この場合、 value はオプションでそのイテレーターの返値を指定します。
  • イテレーターが次の値を生成できた場合、値は false になります。
value

イテレーターが yield または return した、何らかの JavaScript の値です。

例外

TypeError

ジェネレーターが既に実行中である場合に発生します。

next() の使用

次の例では、 next メソッドが返す簡単なジェネレーターとオブジェクトを示します。

js
function* gen() {
  yield 1;
  yield 2;
  yield 3;
}

const g = gen(); // Generator { }
g.next(); // { value: 1, done: false }
g.next(); // { value: 2, done: false }
g.next(); // { value: 3, done: false }
g.next(); // { value: undefined, done: true }

リストでの next() の使用

この例では、 getPage はリストを受け取り pageSize 件ごとにページ分割します。それぞれの next 呼び出しは個々のページを返します。

js
function* getPage(list, pageSize = 1) {
  for (let index = 0; index < list.length; index += pageSize) {
    yield list.slice(index, index + pageSize);
  }
}

const list = [1, 2, 3, 4, 5, 6, 7, 8];
const page = getPage(list, 3); // Generator { }

page.next(); // { value: [1, 2, 3], done: false }
page.next(); // { value: [4, 5, 6], done: false }
page.next(); // { value: [7, 8], done: false }
page.next(); // { value: undefined, done: true }

ジェネレーターへ値を送る

この例では next を値付きで呼び出しています。

メモ: 最初の呼び出しではジェネレーターが何も生成していないため、何もログを記録しません。

js
function* gen() {
  while (true) {
    const value = yield;
    console.log(value);
  }
}

const g = gen();
g.next(1); // Returns { value: undefined, done: false }
// No log at this step: the first value sent through `next` is lost
g.next(2); // Returns { value: undefined, done: false }
// Logs 2

仕様書

Specification
ECMAScript® 2026 Language Specification
# sec-generator.prototype.next

ブラウザーの互換性

関連情報