匿名関数は、グローバル変数を汚染させることなく、JavaScriptがページに記述されることを効果的に保証できます。
これは非常にうまく機能し、あまり馴染みのないページにJavaScriptを追加すると美しいです。
1。匿名の関数とは何ですか?
通常、JavaScriptで関数を定義するには3つの方法があります。
関数キーワードステートメント:
関数fnmethodname(x){alert(x);}
関数リテラル:
var fnmethodname = function(x){alert(x);}
function()constructor:
var fnmethodname = new function( 'x'、 'alert(x);')
上記の3つの方法は、同じメソッド関数fnmethodnameを定義します。
1つ目は、最も一般的に使用される方法です。後者の2つは、機能を変数fnmethodnameにコピーするために、この関数には名前、つまり匿名関数がありません。
実際、かなり多くの言語に匿名の関数があります。
2。関数リテラルと関数()コンストラクターの違い
関数リテラルは匿名関数ですが、構文は任意の関数名で指定することができます。再帰関数を書くときは自分自身と呼ぶことができますが、function()constructorを使用して実行することはできません。
var f = function fact(x){if(x <= 1)return 1;それ以外の場合は、x*fact(x-1)を返します。 };
function()コンストラクターは、実行時にJavaScriptコードの動的な作成と編集を可能にします。このようにして、それはグローバル関数eval()に似ています。
function()コンストラクターは、実行されるたびに関数本体を解析し、新しい関数オブジェクトを作成します。したがって、ループまたは頻繁に実行される機能で関数()コンストラクタを呼び出す効率は非常に低くなります。それどころか、関数リテラルは、遭遇するたびに再コンパイルされません。
function()constructorを使用して関数を作成する場合、典型的なスコープには従わず、常にトップレベルの関数として実行します。
var y = "global";
function constructfunction(){var y = "local";新しい関数を返す( "return y"); //ローカル変数を取得できません} alert(constructfunction()()); //出力「グローバル」および関数キーワード定義には独自の特性があり、function()コンストラクターよりも使用がはるかに困難です。
したがって、この技術は通常めったに使用されません。
関数リテラル式と関数キーワード定義は非常に似ています。
以前の違いを考慮して、文字通りの匿名関数にはOS X 10.4.3の下で特定のWebKitエンジンの下にバグがあるというメッセージがありますが
しかし、私たちが通常匿名関数と呼ぶものは、文字通りの関数形式を使用する匿名関数を指します。
3。匿名関数のコードモード
エラーモード:機能できません。ブラウザは構文エラーを報告します。
function(){alert(1); }();
関数リテラル:最初に関数オブジェクトを宣言し、次に実行します。
(function(){alert(1);})();
優先的な表現:
(function(){alert(2);}());
Void Operator:
void function(){alert(3); }()は同じです。 Hedger Wangは個人的な理由で3番目のタイプを好みますが、実際のアプリケーションでは、最初のタイプを見て使用します。
4。匿名関数の適用
「JavaScriptのモジュールパターン」の最初の文は「グローバル変数が悪魔です」です。
VARキーワードを使用すると、匿名関数は、グローバル変数に汚染を引き起こすことなく、JavaScriptがページに記述されることを効果的に保証できます。
これは非常にうまく機能し、あまり馴染みのないページにJavaScriptを追加すると美しいです。
実際、Yuiとその対応する例は多くの匿名関数を使用しており、他のJavaScriptライブラリもそれらの多くを使用しています。
JavaScriptの機能プログラミングの基礎。
詳細については、「機能プログラミングテクノロジーを使用した美しいJavaScriptの作成」と「機能的なJavaScriptプログラミングのガイド」を参照してください。
JavaScriptの匿名関数の使用法と利点と欠点の上記の詳細な説明は、私があなたと共有するすべてのコンテンツです。参照を提供できることを願っています。wulin.comをもっとサポートできることを願っています。