JS の関数には 2 つの概念が組み込まれています。
- エンティティ
- 機能性
関数エンティティは、機能、つまり複数の入力を出力に変換する機能を含む、ある種の「カプセル」です。このカプセルは、私たちが「オブジェクト」として知っているものです。この再帰の終わりにFunction.constructor === Function
、言語の内省的機能の限界を設定する ID が見つかります。残りの JS 機能は、それらを埋め込むカプセルやオブジェクトが存在しないため、言語自体からアクセスすることはできません。
JS では、スタンドアロンの「機能」を定義することはできませんが、他のオブジェクトとして扱うことができる機能を実装するオブジェクトを作成します。オブジェクトは、機能を実装するためのFunction
コア オブジェクトです。名前付き関数または無名関数を (function
キーワードを使用して) 定義すると、名前 (名前付き関数の場合) または変数 (名前なし関数) に直接バインドされる Function オブジェクトが作成されます。
function foo(a, b) { return a+b; } //This function is a Function object bound to the name `foo`
var a = function(a, b) { return a+b; } //the Function object is bound to `a`
Array オブジェクトには、[]
配列要素へのアクセスに使用される演算子があるのと同じように()
、組み込み機能を呼び出すために使用される Function オブジェクトの演算子として解釈できます。