ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript 関数を理解する

JavaScript 関数を理解する

黄舟
黄舟オリジナル
2016-12-14 15:48:57913ブラウズ

関数はモジュール型プログラミングの基礎です。複雑な 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()を通じて関数オブジェクトを作成することもできます。 function キーワードを使用してオブジェクトを作成します。理解を容易にするために、関数オブジェクトの作成と配列オブジェクトの作成を比較します。まず配列オブジェクトを見てみましょう: 次の 2 行のコードはどちらも配列オブジェクト myArray を作成します:

以下是引用片段:
var myArray=[]; 
//等价于 
var myArray=new Array(); 
同样,下面的两段代码也都是创建一个函数myFunction: 
function myFunction(a,b){ 
      return a+b; 
} 
//等价于 
var myFunction=new Function("a","b","return a+b");

配列オブジェクトの構築ステートメントと比較すると、前に紹介した関数オブジェクトの本質が明確にわかります。これは上記のコードの最初のタイプであり、インタープリター内でこの構文に遭遇すると、Function オブジェクトが自動的に構築され、関数が内部オブジェクトとして保存されて実行されます。ここから、関数オブジェクト名 (関数変数) と通常の変数名は同じ仕様であることがわかります。どちらも変数名を通じて変数を参照できますが、関数変数名の後に括弧とパラメーターを続けることができます。転送機能を実行するリスト。

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){ 
       return a+b; 
}(1,2); 
alert(i);

このコードは、変数 i の値が 3 に等しいことを示します。 i は、作成された関数ではなく戻り値を表します。これは、括弧 "(" が等号 "= よりも優先順位が高いためです。このようなコードは一般的には使用されないかもしれませんが、ユーザーが使用したい場合にはこれがモジュラーの良い解決策です。デザインや名前の競合を避けるため

その他の関連記事については、PHP 中国語 Web サイト (www.php.cn) にご注意ください


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