→
JavaScript の関数は、実際にはすべて Function オブジェクトです。これは、(function(){}).constructor === Function というコードが true を返すことで確認することができます。
このプロパティは非推奨であり、一部の厳格モードではない関数でのみ機能します。
Object.toString() メソッドを上書きします。
Function コンストラクターで生成された関数は、生成コンテキストにクロージャを作りません。つまり常にグローバル・スコープで生成されます。これを実行すると、Function コンストラクターの呼び出し元のスコープは入らず、自身のローカル変数とグローバル変数だけにアクセスできます。これは関数式のコードに 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 はモジュールのローカルになるからです。