ホームページ  >  記事  >  ウェブフロントエンド  >  Javascript_Experience交換の匿名関数の説明

Javascript_Experience交換の匿名関数の説明

WBOY
WBOYオリジナル
2016-05-16 12:05:481395ブラウズ
1. 無名関数とは何ですか?
JavaScript で関数を定義するには、通常 3 つの方法があります:

関数キーワード (関数) ステートメント:
コードをコピー コードとして

関数 fnMethodName(x){alert(x);}

関数リテラル ):
コードをコピー コードは次のとおりです。

var fnMethodName = function(x){alert ( x);}

Function() コンストラクター:
コードをコピー コードは次のとおりです。

var fnMethodName = new Function('x','alert(x);')

上記の 3 つのメソッドは、同じメソッド関数 fnMethodName を定義します。 1 つ目は最も一般的に使用されるメソッドで、後の 2 つは変数 fnMethodName に関数をコピーしますが、この関数には名前がありません、つまり匿名関数です。実際、かなりの数の言語に匿名関数があります。

2. 関数リテラルと Function() コンストラクターの違い
関数リテラルは匿名関数ですが、構文では任意の関数名を指定できます。再帰関数を作成すると、それを自分で呼び出すことができますが、Function() コンストラクターを使用すると呼び出すことができません。
コードをコピー コードは次のとおりです。

var f = function fat(x) {
if (x else return x*fact(x-1);
};

Function() コンストラクターで実行時 Javascript が可能になりますコードの動的作成とコンパイル。この点では、グローバル関数 eval() に似ています。
Function() コンストラクターは関数本体を解析し、実行されるたびに新しい関数オブジェクトを作成します。したがって、ループ内で Function() コンストラクターを呼び出したり、頻繁に実行される関数を呼び出したりする効率は非常に低くなります。対照的に、関数リテラルは、検出されるたびに再コンパイルされません。
Function() コンストラクターを使用して関数を作成すると、その関数は通常のスコープに従いません。常にトップレベル関数として実行されます。
コードをコピーします コードは次のとおりです:

var y = "global"; function constructionFunction() {
var y = "local";
return new Function("return y"); // ローカル変数を取得できません
}
alert(constructFunction()( )); // 出力「グローバル」

Function キーワード定義と比較すると、Function() コンストラクターには独自の特性があり、使用するのがはるかに難しいため、このテクノロジは通常はほとんど使用されません。関数リテラル式と関数キーワード定義は非常に似ています。前述の違いを考慮すると、OS X 10.4.3 の一部の Webkit エンジンではリテラルの匿名関数にバグがあるというニュースがありますが、通常参照する匿名関数は、関数リテラルの形式での匿名関数を指します。詳細については、『JavaScript: The Definitive Guide, 5th Edition』の関数の章を参照してください。

3. 匿名関数のコード パターン
昨日、hedger wang がブログで匿名関数のコード パターンをいくつか紹介しました:

エラー パターン: その他 It will'動作しない場合、ブラウザは構文エラーを報告します。
コードをコピー コードは次のとおりです。

function(){
alert (1) ;
}();

関数リテラル: まず関数オブジェクトを宣言してから、それを実行します。
コードをコピー コードは次のとおりです。

(function(){
alert(1 );
} ) ( );

優先度式: Javascript は括弧の内側から外側に向かって式を実行するため、括弧を使用して式の実行を強制できます。宣言された関数。
コードをコピー コードは次のとおりです。

( function(){
alert(2 );
} ( ) );

void 演算子: void 演算子を使用して、かっこで囲まれていない単一のオペランドを実行します。
コードをコピー コードは次のとおりです。

void function(){
アラート(3 );
}()

これら 3 つの方法は同等です。hedger wang は個人的な理由から 3 番目の方法を好みますが、実際のアプリケーションでは、私が見て使用したのは最初の方法です。
4. 匿名関数の適用

JavaScript のモジュール モード》の最初の文は「グローバル変数は悪魔です」です。匿名関数を var キーワードと組み合わせると、グローバル変数を汚染することなく Javascript がページ上に書き込まれることを効果的に保証できます。これは、見慣れないページに Javascript を追加する場合に非常に効果的かつエレガントです。実際、匿名関数は YUI とそれに対応するパラダイムで広く使用されており、他の Javascript ライブラリでも広く使用されています。
JavaScript は関数型プログラミングの基礎です。詳細については、「関数型プログラミング手法を使用した美しい JavaScript の記述」および「関数型 JavaScript プログラミング ガイド》。​
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。