Function
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
JavaScript の関数は、実際にはすべて Function
オブジェクトです。これは、 (function(){}).constructor === Function
というコードが true を返すことで確認することができます。
コンストラクター
Function()
-
新しい
Function
オブジェクトを生成します。コンストラクターを直接呼び出すと関数を動的に生成することができますが、セキュリティや、eval
と似た性能の (ただし、はるかに重要性の低い) 問題を抱えます。ただし eval とは異なり、Function
コンストラクターはグローバルスコープで実行される関数のみを生成します。
インスタンスプロパティ
Function.arguments
-
関数に渡した引数に対応する配列です。 これは
Function
オブジェクトのプロパティとしては非推奨です。代わりに関数内に用意されているarguments
オブジェクト (関数内で使用可能) を使用してください。 Function.caller
-
現在実行している関数を呼び出した関数を返します。 このプロパティは非推奨であり、一部の厳格モードではない関数でのみ機能します。
Function.displayName
-
関数の表示名です。
Function.length
-
関数によって期待される引数の数を指定します。
Function.name
-
関数の名前です。
インスタンスメソッド
Function.prototype.apply(thisArg [, argsArray])
-
関数を呼び出し、
this
を提供されたthisArg
に設定します。引数はArray
として渡すことができます。 Function.prototype.bind(thisArg[, arg1[, arg2[, ...argN]]])
-
新しい関数を作成し、呼び出されたときに、
this
を提供されたthisArg
に設定します。任意で、指定された一連の引数が、新しく結びつけられた関数が呼び出されたときに与えられた引数の前に付加されます。 Function.prototype.call(thisArg[, arg1, arg2, ...argN])
-
関数を呼び出して、
this
に提供した値を設定します。引数は、指定するオブジェクトのものとして渡すことができます。 Function.prototype.toString()
-
関数のソースコードを表す文字列を返します。
Object.prototype.toString
メソッドを上書きします。
例
Funciton コンストラクターと関数宣言の違い
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
はモジュールのローカルになるからです。
仕様書
Specification |
---|
ECMAScript Language Specification # sec-function-objects |
ブラウザーの互換性
BCD tables only load in the browser