JavaScriptの関数を深く理解する
関数はモジュール型プログラミングの基礎です。複雑な Ajax アプリケーションを作成するには、関数をより深く理解する必要があります。 JavaScript の関数は他の言語とは異なり、各関数はオブジェクトとして保持され、実行されます。関数オブジェクトのプロパティを使用すると、関数を変数に割り当てたり、関数をパラメーターとして渡すことが簡単にできます。続行する前に、関数を使用する構文を見てみましょう:
function func1(…){…}
var func2=function(…){…};
var func3=function func4(…){…};
var func5=new Function();
これらは関数を宣言するための正しい構文です。これらは、他の言語の一般的な関数や、以前に紹介した関数の定義方法とは大きく異なります。では、なぜ JavaScript でこのように記述できるのでしょうか?それはどのような構文に従いますか?これらについては以下で説明します。
関数オブジェクトを理解する
functionキーワードを使用して関数を定義し、各関数に関数名を指定し、関数名を通じて呼び出すことができます。 JavaScript が解釈されて実行されるとき、関数はオブジェクトとして保持されます。これが、導入される Function オブジェクトです。
関数オブジェクトは他のユーザー定義オブジェクトとは本質的に異なります。このタイプのオブジェクトは内部オブジェクトと呼ばれます。たとえば、日付オブジェクト (Date)、配列オブジェクト (Array)、および文字列オブジェクト (String) はすべて内部オブジェクトです。 。これらの組み込みオブジェクトのコンストラクターは JavaScript 自体によって定義されます。 new Array() などのステートメントを実行してオブジェクトを返すことにより、JavaScript にはユーザーがオブジェクトの構築方法を指定する代わりに、返されたオブジェクトを初期化する内部メカニズムがあります。 。
JavaScriptでは、配列オブジェクトの対応する型がArrayで、日付オブジェクトの対応する型がDateであるのと同じように、関数オブジェクトの対応する型はFunctionです。 new Function()を通じて関数オブジェクトを作成することもできます。オブジェクトを作成するための関数キーワード。理解を容易にするために、関数オブジェクトの作成と配列オブジェクトの作成を比較します。まず配列オブジェクトを見てみましょう: 次の 2 行のコードはどちらも配列オブジェクト myArray を作成します:
var myArray=[];
//
var myArray=new Array();
と同等です。同様に、次の 2 つの部分はコードのコードも関数 myFunction を作成するものです:
function myFunction(a,b){
return a+b;
}
//
var myFunction=new Function("a","b","return a) と同等+b" );
配列オブジェクトを構築するステートメントと比較すると、関数オブジェクトの本質がよくわかります。前に紹介した関数宣言は、上記のコードの最初の方法であり、インタプリタ内でこれが実行されると、構文が見つかった場合、関数オブジェクトが自動的に構築され、関数を内部オブジェクトとして保存および実行します。ここから、関数オブジェクト名 (関数変数) と通常の変数名は同じ仕様であることがわかります。どちらも変数名を通じて変数を参照できますが、関数変数名の後に括弧とパラメーターを続けることができます。転送機能を実行するリスト。
new Function() の形式で関数を作成することは一般的ではありません。関数本体に複数のステートメントが含まれている場合、それらを文字列の形式でパラメータとして渡すと、コードの可読性が悪くなります。以下はその使用構文の紹介です:
var funcName=new Function(p1,p2,,pn,body);
パラメータの型はすべて文字列であり、p1 から pn は作成された関数のパラメータ名のリストを表します。 body は作成された関数の関数本体ステートメントを表し、funcName は作成された関数の名前です。パラメータを指定せずに空の関数を作成したり、funcName を指定せずに名前のない関数を作成したりすることもできます。もちろん、そのような関数には意味がありません。
p1 から pn はパラメータ名のリストであることに注意してください。つまり、p1 はパラメータを表すだけでなく、カンマで区切られたパラメータのリストにすることもできます。たとえば、次の定義は同等です:
new。 Function("a", "b", "c", "return a+b+c")
new Function("a, b, c", "return a+b+c")
new Function("a ,b ", "c", "return a+b+c")
JavaScript では Function 型が導入され、new Function() などの構文が提供されています。これは、関数オブジェクトがプロパティやメソッドを追加するために Function 型を使用する必要があるためです。
関数の本質は内部オブジェクトであり、JavaScript インタプリタが関数の動作方法を決定します。上記のコードで作成した関数は、プログラム内で関数名を使用して呼び出すことができます。このセクションの冒頭に挙げた関数定義の問題についても説明します。関数宣言の後ろにかっこを直接追加して、関数の作成が完了した直後に関数を呼び出すことを示すことができることに注意してください。たとえば:
var I = Function (a, B) (i);
このコードでは、変数 i の値は 3 に等しい。 i は、作成された関数ではなく戻り値を表します。これは、括弧 "(" が等号 "= よりも優先順位が高いためです。このようなコードは一般的には使用されないかもしれませんが、ユーザーが使用したい場合にはこれがモジュラーの良い解決策です。
関数を作成する次の 2 つの方法は同等であることに注意してください。
function funcName(){
関数本体 名前のない関数を作成します。変数をポイントするだけです。名前のない関数に。使用上の違いは 1 つだけです。名前付き関数の場合は呼び出し後に定義できますが、名前のない関数の場合は呼び出す前に定義する必要があります。例:
<script language="JavaScript" type="text/javascript">
<!--
func();
var func=function(){
alert(1)
//-- >
</script>
このステートメントは func に対して未定義エラーを生成し、次のようになります:
var someFunc=function func(){
alert(1)
}
//-->
JavaScriptは説明型言語ですが、関数が呼び出されたときにコード全体に対応する関数定義があるかどうかがチェックされます。この関数名は関数 funcName() の形式で定義されている場合にのみ有効であり、匿名にすることはできません。関数。
関数オブジェクトと他の内部オブジェクトの関係
関数オブジェクトに加えて、Object、Array、Date、RegExp、Math、Errorなど、多くの内部オブジェクトがあります。これらの名前は実際には型を表しており、new 演算子を通じてオブジェクトを返すことができます。ただし、関数オブジェクトは他のオブジェクトとは異なります。typeof を使用して関数オブジェクトの型を取得する場合は、引き続き文字列 "function" を返します。また、配列オブジェクトまたはその他のオブジェクトの typeof を使用する場合は、文字列 "object" を返します。 」。次のコードは、typeof のさまざまなタイプを示しています。
alert(typeof(Function)));
alert(typeof(new Function()));
alert(typeof(Array));
alert(typeof( Object ));
alert(typeof(new Date()));
alert(typeof(new Object()));このコードを実行すると、次のことがわかります: 前 4 それぞれステートメントは「関数」を表示し、次の 3 つのステートメントは「オブジェクト」を表示します。新しい関数が実際に関数を返すことがわかります。これは他のオブジェクトとは大きく異なります。 Array や Object などの他の型は、new 演算子を通じて通常のオブジェクトを返します。関数自体もオブジェクトですが、オブジェクト コンストラクターでもあるため、通常のオブジェクトとは異なります。つまり、以前に紹介したオブジェクトを返す新しい関数を作成できます。 typeof が「function」を返すオブジェクトはすべて関数オブジェクトです。このようなオブジェクトはコンストラクターとも呼ばれます。したがって、すべてのコンストラクターがオブジェクトですが、すべてのオブジェクトがコンストラクターであるわけではありません。
関数自体もオブジェクトなので、その型は function です。C++ や Java などのオブジェクト指向言語のクラス定義を考えると、Function 型の役割が推測できます。関数オブジェクト自体のいくつかのメソッドと属性を定義できます。関数のプロトタイプ オブジェクトを使用すると、関数型の定義を簡単に変更および拡張できます。たとえば、関数型 Function は次のように拡張され、method1 メソッドになります。関数は、「関数」を表示するダイアログ ボックスをポップアップすることです:
Function.prototype.method1=function(){
alert("function");}
function func1(a,b, c){
return a+b+c;
}
func1.method1();
func1.method1.method1 ();
method1 メソッドを呼び出す最後のステートメント func1.method1.mehotd1() に注目してください。関数オブジェクトのメソッド1。少し混乱しているように見えますが、構文を詳しく見ると、これが再帰的定義であることがわかります。 Method1 自体も関数であるため、関数オブジェクトのプロパティとメソッドも持ちます。Function 型へのすべてのメソッド拡張には、このような再帰的なプロパティがあります。
return typeof(this);
}
var array1=new Array();
function func1(a,b){
return a+b;
alert(array1.getType());アラート(機能1. getType());
上記のコードは、オブジェクトの型を返す getType メソッドをすべてのオブジェクトに追加します。 2 つのアラート ステートメントには、それぞれ「オブジェクト」と「関数」が表示されます。
関数オブジェクトの本質は以前紹介しましたが、各関数は変数に簡単に代入できる特別なオブジェクトとして表現され、この変数名を通じて関数呼び出しが行われます。変数として、パラメータの形式で別の関数に渡すことができます。これは、JavaScript イベント処理メカニズムの以前の紹介で見られました。たとえば、次のプログラムは func1 をパラメータとして func2 に渡します。 func1( theFunc){
theFunc();}
function func2(){
alert("ok");
}
func1(func2);
最後の文では、func2 がオブジェクトとして仮引数に渡されています。 func1 の theFunc を呼び出した後、func1 によって theFunc が内部的に呼び出されます。実際、関数をパラメータとして渡すこと、または関数を他の変数に割り当てることは、すべてのイベント メカニズムの基礎です。
たとえば、ページの読み込み時に初期化作業を実行する必要がある場合は、最初に init 初期化関数を定義し、それを window.onload=init; ステートメントを通じてページ読み込み完了イベントにバインドできます。ここでの init は関数オブジェクトであり、ウィンドウの onload イベント リストに追加できます。
上記は JavaScript の関数についての詳細な理解です。その他の関連記事については、PHP 中国語 Web サイト (www.php.cn) に注目してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Go 言語は、クロージャとリフレクションという 2 つの動的関数作成テクノロジを提供します。クロージャを使用すると、クロージャ スコープ内の変数にアクセスでき、リフレクションでは FuncOf 関数を使用して新しい関数を作成できます。これらのテクノロジーは、HTTP ルーターのカスタマイズ、高度にカスタマイズ可能なシステムの実装、プラグイン可能なコンポーネントの構築に役立ちます。

C++ 関数の名前付けでは、読みやすさを向上させ、エラーを減らし、リファクタリングを容易にするために、パラメーターの順序を考慮することが重要です。一般的なパラメータの順序規則には、アクション-オブジェクト、オブジェクト-アクション、意味論的な意味、および標準ライブラリへの準拠が含まれます。最適な順序は、関数の目的、パラメーターの種類、潜在的な混乱、および言語規約によって異なります。

効率的で保守しやすい Java 関数を作成するための鍵は、シンプルに保つことです。意味のある名前を付けてください。特殊な状況に対処します。適切な可視性を使用してください。

1. SUM 関数は、列またはセルのグループ内の数値を合計するために使用されます (例: =SUM(A1:J10))。 2. AVERAGE 関数は、列またはセルのグループ内の数値の平均を計算するために使用されます (例: =AVERAGE(A1:A10))。 3. COUNT 関数。列またはセルのグループ内の数値またはテキストの数をカウントするために使用されます。例: =COUNT(A1:A10)。 4. IF 関数。指定された条件に基づいて論理的な判断を行い、結果を返すために使用されます。対応する結果。

C++ 関数のデフォルト パラメーターの利点には、呼び出しの簡素化、可読性の向上、エラーの回避などがあります。欠点は、柔軟性が限られていることと、名前の制限があることです。可変引数パラメーターの利点には、無制限の柔軟性と動的バインディングが含まれます。欠点としては、複雑さの増大、暗黙的な型変換、デバッグの難しさなどが挙げられます。

C++ で参照型を返す関数の利点は次のとおりです。 パフォーマンスの向上: 参照による受け渡しによりオブジェクトのコピーが回避され、メモリと時間が節約されます。直接変更: 呼び出し元は、返された参照オブジェクトを再割り当てせずに直接変更できます。コードの簡素化: 参照渡しによりコードが簡素化され、追加の代入操作は必要ありません。

カスタム PHP 関数と定義済み関数の違いは次のとおりです。 スコープ: カスタム関数はその定義のスコープに限定されますが、事前定義関数はスクリプト全体からアクセスできます。定義方法: カスタム関数は function キーワードを使用して定義されますが、事前定義関数は PHP カーネルによって定義されます。パラメータの受け渡し: カスタム関数はパラメータを受け取りますが、事前定義された関数はパラメータを必要としない場合があります。拡張性: カスタム関数は必要に応じて作成できますが、事前定義された関数は組み込みで変更できません。

C++ の例外処理は、特定のエラー メッセージ、コンテキスト情報を提供し、エラーの種類に基づいてカスタム アクションを実行するカスタム例外クラスを通じて強化できます。 std::Exception から継承した例外クラスを定義して、特定のエラー情報を提供します。カスタム例外をスローするには、throw キーワードを使用します。 try-catch ブロックでdynamic_castを使用して、キャッチされた例外をカスタム例外タイプに変換します。実際の場合、open_file 関数は FileNotFoundException 例外をスローします。例外をキャッチして処理すると、より具体的なエラー メッセージが表示されます。
