ホームページ >ウェブフロントエンド >jsチュートリアル >ECMAScript_javascript スキルの関数タイプ

ECMAScript_javascript スキルの関数タイプ

WBOY
WBOYオリジナル
2016-05-16 15:57:071292ブラウズ

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","re​​turn 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 を学習する皆さんのお役に立てれば幸いです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。