ECMAScript の上記について言えば、最も興味深いのは関数だと思います。なぜ興味深いかというと、関数が実際にはオブジェクトであるからです。各関数は Function 型のインスタンスであり、他の参照型と同じプロパティとメソッドを持ちます。関数はオブジェクトであるため、関数名は実際には関数オブジェクトへのポインタであり、関数にバインドされません。関数は通常、次の例のように関数宣言構文を使用して定義されます。
関数 sum(num1,num2)
{
num1 num2 を返します;
}
これは、以下の関数式を使用して関数を定義する方法とほぼ同じです。
var sum=function(num1,num2)
{
num1 num2 を返します;
};
上記のコードは変数 sum を決定し、それを関数として初期化します。 function キーワードの後に関数名がないことがわかります。これは、関数式を使用して関数を定義する場合、関数名を使用する必要がないためです (関数は変数 sum を通じて参照できます)。また、他の変数を宣言する場合と同様に、関数の末尾にはセミコロンがあることに注意してください。
関数を定義する最後の方法は、Function コンストラクターを使用することです。 Function コンストラクターは任意の数のパラメーターを受け入れることができますが、最後のパラメーターは常に関数本体とみなされ、前のパラメーターは新しい関数のパラメーターを列挙します。以下の例:
var sum=new Function("num1","num2","return num1 num2");//推奨されません
技術的な観点から見ると、これは関数式です。ただし、この構文ではコードが 2 回解析され (1 回目は通常の ECMAScript コードを解析し、2 回目はコンストラクタに渡される文字列を解析します)、パフォーマンスに影響するため、このメソッドを使用して関数を定義することはお勧めしません。ただし、この構文は、「関数はオブジェクトであり、関数名はポインターである」という概念を理解するのに非常に直感的です。
関数名は単に関数へのポインタであるため、関数名はオブジェクト ポインタを含む他の変数と何ら変わりません。つまり、次の例のように、関数は複数の名前を持つことができます:
関数 sum(num1,num2)
{
num1 num2 を返します;
}
alert(sum(10,10));//20
var anotherSum=sum;
alert(anotherSum(10,10));//20
sum=null;
alert(anotherSum(10,10));//20
上記のコードは、最初に sum() という名前の関数を定義します。この関数は 2 つの値の合計を求めるために使用されます。次に、変数anotherSumが宣言され、sum()と等価に設定されます(sumの値をanotherSumに代入します)。括弧なしで関数名を使用すると、関数を呼び出すのではなく、関数ポインターにアクセスすることに注意してください。この時点で、anotherSum と sum は同じ関数を指すため、anotherSum() を呼び出して結果を返すこともできます。 sum が null に設定され、関数から「切断」された場合でも、anotherSum() を呼び出すのは正常であることがわかります。
以上がこの記事の全内容です。JavaScript を学習する皆さんのお役に立てれば幸いです。