Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2015年7月以降、すべてのブラウザーで利用可能です。
Function() コンストラクターは、新しい Function オブジェクトを生成します。コンストラクターを直接呼び出すと動的に関数を生成することができますが、セキュリティや、 eval() と似た性能の(ただし、はるかに重要性の低い)問題を抱えます。ただし eval とは異なり、 Function コンストラクターはグローバルスコープで実行される関数のみを生成します。
メモ: Function() は new があってもなくても呼び出すことができます。どちらも新しい Function インスタンスを作成します。
関数で仮引数名として使用される名前。それぞれ、JavaScript で有効な引数(プレーン識別子、残余引数、分割引数のいずれか、オプションで既定値付き)に対応する文字列、またはカンマで区切られたそのような文字列のリストでなければなりません。
引数は関数式と同様に解釈できるため、空白やコメントも受け入れられます。例えば、"x", "theValue = 42", "[a, b] /* 数値 */"、または "x, theValue = 42, [a, b] /* 数値 */" です。("x, theValue = 42", "[a, b]" も正しいですが、とても読みづらいです。)
functionBody関数定義を形成する JavaScript の文を含む文字列です。
Function コンストラクターで生成された Function オブジェクトは、関数が作成されたときに構文解析されます。これは、関数を関数式または関数宣言を使って定義してコード内で呼び出すと、コードの他の部分と一緒に構文解析されるため、それに比べて効率が落ちます。
関数に渡される引数のうち、最後のものを除くすべては、渡された順番で、作成する関数の引数の識別子名として扱われます。関数は、次の方法でソースを組み立てることで、関数式として動的にコンパイルされます。
これは、この関数の toString() メソッドを呼び出すことで観察することができます。
しかし、通常の関数式とは異なり、 anonymous の名前は functionBody のスコープには追加されません。 functionBody はグローバルスコープにしかアクセスしないためです。 functionBody が厳格モードでない場合(本体自体に "use strict" ディレクティブを指定する必要があるのは、コンテキストから厳格性が継承されないためです)、 arguments.callee を使用して関数自体を参照することができます。あるいは、再帰的な部分を内部関数として定義することもできます。
なお、組み立てられたソースの 2 つの動的な部分、すなわち、引数リスト args.join(",") および functionBody は、最初の段階で別個に構文解析され、それぞれ構文的に有効であることが保証されます。これにより、インジェクションのような試みを防止します。
以下のコードは 2 つの引数を取る Function オブジェクトを生成します。
引数 a および b は関数の本体 return a + b の中で使用される形式的な仮引数名です。
| ECMAScript® 2027 Language Specification # sec-function-constructor |
ブラウザー互換性一覧表を表示するには、JavaScript を有効にしてください。
より良いインターネットのための青写真。
このコンテンツの一部は、©1998–2026 個人の mozilla.org 協力者です。コンテンツはクリエイティブ・コモンズ・ライセンスのもとで利用できます。