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

View in English Always switch to English

function* 式

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

function* キーワードは、式の中でジェネレーター関数を定義するために使用することができます。

また、ジェネレーター関数はfunction*宣言を使用して定義することもできます。

試してみましょう

const foo = function* () {
  yield "a";
  yield "b";
  yield "c";
};

let str = "";
for (const val of foo()) {
  str += val;
}

console.log(str);
// 予想される結果: "abc"

構文

js
function* (param0) {
  statements
}
function* (param0, param1) {
  statements
}
function* (param0, param1, /* …, */ paramN) {
  statements
}

function* name(param0) {
  statements
}
function* name(param0, param1) {
  statements
}
function* name(param0, param1, /* …, */ paramN) {
  statements
}

メモ: 式文は、function*宣言との曖昧さを避けるため、キーワード function で始めることはできません。function キーワードが式を始めるのは、文を受け入れないコンテキストで現れる場合のみです。

引数

name 省略可

関数名。省略可。省略した場合、関数は無名関数として認識されます。名前は関数本体のみにローカルです。

paramN 省略可

関数の形式引数の名前。 引数の構文については、関数リファレンスを参照してください。

statements 省略可

関数の本体を構成する文。

解説

function* 式は function* 宣言ととてもよく似ており、構文もほとんど同じです。function* 式と function* 文の主な違いは、function* 式で無名ジェネレーター関数を生成する場合は関数名が省略できる点です。 function* 式は、定義すると直ちに実行する IIFE (即時実行関数式)として使用できるため、その場で作成する反復可能イテレーターオブジェクトを実現することができます。詳細は関数に関する章も参照してください。

function* 式の使用

次の例では、無名ジェネレーター関数を定義し、x に代入します。この関数は引数の二乗を生成します。

js
const x = function* (y) {
  yield y * y;
};

仕様書

Specification
ECMAScript® 2026 Language Specification
# sec-generator-function-definitions

ブラウザーの互換性

関連情報