HTML: Markup language
CSS: Styling language
JavaScript: Scripting language
Web APIs: Programming interfaces
All web technology
Learn web development
Discover our tools
Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
View in English Always switch to English
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
* Some parts of this feature may have varying levels of support.
Function オブジェクトは関数についてのメソッドを提供します。 JavaScript では、すべての関数が実際には Function オブジェクトです。
Function
Function()
新しい Function オブジェクトを生成します。コンストラクターを直接呼び出すと関数を動的に生成することができますが、セキュリティや、 eval() と似た性能の (ただし、はるかに重要性の低い) 問題を抱えます。ただし eval() とは異なり、 Function コンストラクターはグローバルスコープで実行される関数のみを生成します。
eval()
以下のプロパティは Function.prototype で定義されており、すべての Function インスタンスで共有されています。
Function.prototype
Function.prototype.arguments
この関数に渡された引数を表します。厳格モード、アロー関数、非同期関数、ジェネレーター関数については、 arguments プロパティにアクセスすると TypeError が発生します。代わりに関数のクロージャ内で arguments オブジェクトを使用してください。
arguments
TypeError
Function.prototype.caller
現在実行している関数を呼び出した関数を返します。厳格モード、アロー関数、非同期関数、ジェネレーター関数については、 arguments プロパティにアクセスすると TypeError が発生します。
Function.prototype.constructor
インスタンスオブジェクトを作成したコンストラクター関数。 Function のインスタンスの場合、初期値は Function コンストラクターです。
以下のプロパティは、それぞれの Function インスタンスが自分自身で持つプロパティです。
displayName
関数の表示名です。
length
関数によって期待される引数の数を指定します。
name
関数の名前です。
prototype
new 演算子付きでコンストラクターとして関数を使用する場合に使用されます。新しいオブジェクトのプロトタイプとなります。
new
Function.prototype.apply()
指定された this 値とオプションで引数を配列(または配列風オブジェクト)として渡し、指定された関数を呼び出します。
this
Function.prototype.bind()
新しい関数を作成し、呼び出されたときに、 this を指定された値に設定します。オプションで、指定された一連の引数が、新しく結びつけられた関数が呼び出されたときに与えられた引数の前に付加されます。
Function.prototype.call()
指定された this 値とオプションで引数を渡し、指定された関数を呼び出します。
Function.prototype.toString()
関数のソースコードを表す文字列を返します。 Object.prototype.toString メソッドを上書きします。
Object.prototype.toString
Function.prototype[Symbol.hasInstance]()
コンストラクター関数が、オブジェクトをコンストラクターのインスタンスの 1 つとして認識するかどうかを判断するための、既定の手順を指定します。 instanceof 演算子によって呼び出されます。
instanceof
Function コンストラクターで生成された関数は、生成コンテキストにクロージャを作りません。つまり常にグローバルスコープで生成されます。これを実行すると、 Function コンストラクターの呼び出し元のスコープは入らず、自身のローカル変数とグローバル変数だけにアクセスできます。これは関数式のコードに eval() を使うのとは異なります。
// `var` でグローバルプロパティを作成 var x = 10; function createFunction1() { const x = 20; return new Function("return x;"); // この `x` はグローバルの `x` を表す } function createFunction2() { const x = 20; function f() { return x; // この `x` は上記のローカルの `x` を表す } return f; } const f1 = createFunction1(); console.log(f1()); // 10 const f2 = createFunction2(); console.log(f2()); // 20
このコードはウェブブラウザーでは動作しますが、 Node.js では f1() で ReferenceError が発生します。 x が見つからないためです。これは Node の最上位のスコープがグローバルスコープではなく、 x はモジュールのローカルになるからです。
f1()
ReferenceError
x
Enable JavaScript to view this browser compatibility table.
function
AsyncFunction
AsyncGeneratorFunction
GeneratorFunction