Function() コンストラクター

Function コンストラクターは、新しい Function オブジェクトを生成します。コンストラクターを直接呼び出すと動的に関数を生成することができますが、セキュリティや、 eval (en-US) と似た性能の (ただし、はるかに重要性の低い) 問題を抱えます。ただし eval とは異なり、 Function コンストラクターはグローバルスコープで実行される関数のみを生成します。

試してみましょう

構文

new Function([arg1 [, arg2 [, ...argN]] ,] functionBody)

引数

arg1, arg2, ... argN

仮引数の名前として関数で用いるための名前。各々は、妥当な JavaScript の識別子と一致する文字列か、カンマで区切られた文字列などのリストでなければなりません。例えば、 "x", "theValue", "x,theValue" などです。

functionBody

関数定義を形成する JavaScript の文を含む文字列。

解説

Function コンストラクターで生成された Function オブジェクトは、関数が作成されたときに解釈されます。これは、関数を関数式関数文を使って定義してコード内で呼び出した場合に比べ、コードの他の部分と一緒に解釈されるため、効率が落ちます。

関数に渡されるすべての引数は、関数のパラメーター識別名として、渡される順番どおりに作成されます。引数を省略すると、その引数の値は undefined になります。

(new 演算子を用いずに) 関数として、Function コンストラクターを実行することは、コンストラクターとして実行することと同じです。

Function コンストラクターに引数を指定する

以下のコードは二つの引数を取る Function オブジェクトを生成します。

js
// この例は JavaScript コンソールで直接実行することができます

// 二つの引数を取り、その合計を返す関数を生成します
const adder = new Function("a", "b", "return a + b");

// 関数を呼び出します
adder(2, 6);
// 8

引数 "a" および "b" は関数の本体 "return a + b" の中で使用される形式的な引数名です。

仕様書

Specification
ECMAScript Language Specification
# sec-function-constructor

ブラウザーの互換性

BCD tables only load in the browser

関連情報