GeneratorFunction
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.
GeneratorFunction
コンストラクターは、新しいジェネレーター関数オブジェクトを生成します。 JavaScript では、すべてのジェネレーター関数が実際に GeneratorFunction
オブジェクトです。
GeneratorFunction
はグローバルオブジェクトではないことに注意してください。次のコードを評価することによって得られます。
Object.getPrototypeOf(function* () {}).constructor;
試してみましょう
構文
new GeneratorFunction ([arg1[, arg2[, ...argN]],] functionBody)
引数
arg1, arg2, ... argN
-
形式的な引数名として関数に使用される名前です。それぞれが有効な JavaScript の識別子であるか、カンマで区切った文字列のリストで、例えば "
x
", "theValue
", "a,b
" などです。 functionBody
-
関数定義を構成する JavaScript 文を含む文字列。
解説
GeneratorFunction
コンストラクターで生成されたジェネレーター関数オブジェクトは、関数が生成されたときにパースされます。これは、ジェネレーター関数を function* 式
で定義してからコード内で呼び出す方法ほど効率的ではありません。というのも、そのような関数はコードの残りの部分と共にパースされるからです。
関数に渡されたすべての引数は、渡された順に、作成される関数内の引数の識別子の名前として扱われます。
メモ: ジェネレーター関数
が GeneratorFunction
コンストラクターによって生成された場合、生成コンテキストのクロージャは作成されません。常にグローバルスコープに生成されます。
実行すると、ローカル変数とグローバルグローバル変数にのみアクセスでき、 GeneratorFunction
コンストラクターが呼び出されたスコープの変数にはアクセスできません。
これは、ジェネレーター関数式のコードで eval
を使用した場合とは異なります。
GeneratorFunction
コンストラクターを (new
演算子を使用せずに) 関数として呼び出した場合、コンストラクターとして呼び出したときと同じ効果があります。
例
GeneratorFunction() コンストラクターからジェネレーター関数を生成する
var GeneratorFunction = Object.getPrototypeOf(function* () {}).constructor;
var g = new GeneratorFunction("a", "yield a * 2");
var iterator = g(10);
console.log(iterator.next().value); // 20
仕様書
Specification |
---|
ECMAScript Language Specification # sec-generatorfunction-objects |
ブラウザーの互換性
BCD tables only load in the browser