JavaScript

Functionコンストラクター

 編集:2022.08.07 by T.A.

新しい Function オブジェクトを生成します。

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

new Function([arg1 [, arg2 [, ...argN]] ,] functionBody)
argn 仮引数の名前として関数で用いるための名前。各々は、妥当な JavaScript の識別子と一致する文字列か、カンマで区切られた文字列などのリストでなければなりません。例えば、"x"、"theValue"、"x,theValue" などです。
functionBody 関数定義を形成する JavaScript の文を含む文字列。
解説

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

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

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

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

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

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

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


テスト