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"
構文
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
に代入します。この関数は引数の二乗を生成します。
const x = function* (y) {
yield y * y;
};
仕様書
Specification |
---|
ECMAScript® 2026 Language Specification> # sec-generator-function-definitions> |
ブラウザーの互換性
Loading…