--- title: Function slug: Web/JavaScript/Reference/Global_Objects/Function tags: - Class - Function - JavaScript translation_of: Web/JavaScript/Reference/Global_Objects/Function ---
JavaScript の関数は、実際にはすべて Function オブジェクトです。これは、 (function(){}).constructor === Function というコードが true を返すことで確認することができます。
Function オブジェクトを生成します。コンストラクターを直接呼び出すと関数を動的に生成することができますが、セキュリティや、 {{jsxref("eval")}} と似た性能の (ただし、はるかに重要性の低い) 問題を抱えます。ただし eval とは異なり、 Function コンストラクターはグローバルスコープで実行される関数のみを生成します。this を提供された thisArg に設定します。引数は {{jsxref("Array")}} として渡すことができます。this を提供された thisArg に設定します。任意で、指定された一連の引数が、新しく結びつけられた関数が呼び出されたときに与えられた引数の前に付加されます。this に提供した値を設定します。引数は、指定するオブジェクトのものとして渡すことができます。Function コンストラクターで生成された関数は、生成コンテキストにクロージャを作りません。つまり常にグローバルスコープで生成されます。これを実行すると、 Function コンストラクターの呼び出し元のスコープは入らず、自身のローカル変数とグローバル変数だけにアクセスできます。これは関数式のコードに {{jsxref("eval")}} を使うのとは異なります。
var x = 10;
function createFunction1() {
var x = 20;
return new Function('return x;'); // この |x| はグローバルの |x| を表す
}
function createFunction2() {
var x = 20;
function f() {
return x; // この |x| は上記のローカルの |x| を表す
}
return f;
}
var f1 = createFunction1();
console.log(f1()); // 10
var f2 = createFunction2();
console.log(f2()); // 20
このコードはウェブブラウザーでは動作しますが、 Node.js では f1() で ReferenceError が発生します。 x が見つからないためです。これは Node の最上位のスコープがグローバルスコープではなく、 x はモジュールのローカルになるからです。
| 仕様書 |
|---|
| {{SpecName('ESDraft', '#sec-function-objects', 'Function')}} |
{{Compat("javascript.builtins.Function")}}