JAvascriptの匿名関数
6915 ワード
昔の人は「魚を授けるより、漁を授けるほうがましだ」と言っていたが、先生がいなければ、自分で「漁」を学ぶしかなかった.やはり簡単なことから始めましょう.次のいくつかのコードは最もよく知られていますが、なぜこのように書いたのか知っていますか.なぜページにこれらのコードを付けるのか、jQueryオブジェクトはすでに導入されています.
これから始めます!プログラマーはgoogleとbaiduの方法を知っています.同じように私も...ああ!これはjavascriptの匿名関数だったのか.この匿名関数は何ですか?ゆっくり勉強しましょう.JavaScript定義関数には、一般的に次の3つの方法があります.1.関数キー文:
2.関数数面量(Function Literals):
3.Function()コンストラクション関数:var Name=new Function('a','turn a;')上の3つの方法で同じメソッド関数Nameが定義されています.1つ目は最も一般的な方法で、後の2つは1つの関数を変数Nameにコピーしますが、この2つの関数には名前がありません.これが匿名関数なのでしょうか.次の説明を見てみましょう.関数数の面量とFunction()コンストラクション関数には違いがあります!(1). 関数の数値面量は匿名の関数であり、構文では任意の関数名を指定できます.再帰関数を書くときは自分で呼び出すことができますが、Function()を使用して関数を構築することはできません.
(2). Function()コンストラクション関数を使用すると、実行時にJavascriptコードを動的に作成およびコンパイルできます.この方法ではグローバル関数eval()に似ています.(3). Function()コンストラクション関数は、実行するたびに関数本体を解析し、新しい関数オブジェクトを作成します.したがって,1サイクルまたは頻繁に実行される関数でFunction()コンストラクション関数を呼び出す効率は非常に低い.逆に,関数数面量は遭遇するたびに再コンパイルされるわけではない.(4). Function()コンストラクション関数を使用して関数を作成する場合、典型的な役割ドメインには従いません.これは常にトップレベルの関数として実行されています.
ここではFunctionオブジェクトという名前にも触れています.FunctionオブジェクトはJavaScriptの固有のオブジェクトで、すべての関数は実際にはFunctionオブジェクトです.だから上の3つはfunctionオブジェクトです.以上、functionオブジェクトは、通常の方法、構築方法で関数を作成することができ、関数に名前を付けなくてもよい(匿名関数).匿名関数を続け、その名の通り、匿名関数は実際の名前のない関数です.例えば、上記の例を挙げます.関数の名前を消して、2、3が関数であるかどうかを判断します.
いずれもfunctionオブジェクトを返しますが、名前はないようですが、確かに関数です.では、匿名関数を呼び出すにはどうすればいいのでしょうか.関数を呼び出すには、それを位置決めし、参照する方法が必要です.だから、名前を探すのを手伝う必要があります.これがこの例2,3「Name」の役割です.そしてこれも私たちがよく見かけるフォーマットです.ここでは、開いたばかりのjQueryコード、すなわち()を使用して匿名関数を囲み、後にカッコ(パラメータリストを含む)を1対追加する方法もあります.次のコードを猫にしましょう.
多くの人が不思議に思うかもしれませんが、なぜこの方法が呼び出されたのでしょうか.忙しくなくてもセグメントコードを見ればわかるかもしれません.
このアプリがまだおかしいと思ったら、私がネットで見た説明を見てみましょう.カッコは、私たちの式を組み合わせてブロック化し、各ブロック、すなわち各ペアのカッコには戻り値があります.この戻り値は、実際にはカッコ内の式の戻り値です.したがって,一対の括弧で匿名関数を囲むと,実際には括弧対が匿名関数のFunctionオブジェクトを返す.したがって,括弧対に匿名関数を加えると,名前付き関数のようにその参照位置が得られる.したがって、この参照変数にパラメータリストを付けると、通常の関数の呼び出し形式が実現されます.最後に匿名関数のコードパターンを見てみましょう.エラー・モード:機能しないため、ブラウザは構文エラーを報告します.function(){ alert(1); }(); 1.関数オブジェクトを宣言してから実行します.(function(){ alert(1); } ) ( ); 2.優先式:Javascript実行式は括弧の内側から外側になるので、括弧で宣言された関数を強制的に実行できます.( function(){ alert(2); } ( ) ); 3.Voidオペレータ:丸カッコで囲まれていない個別のオペランドをvoidオペレータで実行します.void function(){ alert(3); }()この3つの方法は同じで、あなたの考えをそのように見ました.ほほほ!これでだいぶ悪くなった.今回はわかりましたが、最初のjQueryは手紙の数字の面量だったのですね.(匿名関数)(パラメータ)(function($){})(jQuery);
一、匿名関数とは何ですか.
Javascriptで関数を定義するには、一般的に次の3つの方法があります.関数キーワード(function)文: 函数面量(Function Literals): Function()コンストラクタ: 上の3つの方法は同じ方法関数fnMethodNameを定義しています.1つ目は最も一般的な方法で、後の2つは変数fnMethodNameに1つの関数をコピーします.この関数は名前がない、すなわち匿名関数です.実は、かなりの言語に匿名関数があります.
二、関数数面量とFunction()構造関数の違い関数数面量は匿名関数であるが、構文は任意の関数名を指定することを許可し、再帰関数を書くときは自身を呼び出すことができ、Function()を使用して関数を構築することはできない. Function()コンストラクタでは、実行時のJavascriptコードの動的作成とコンパイルを可能にします.この方法ではグローバル関数eval()に似ています. Function()コンストラクション関数は、実行するたびに関数本体を解析し、新しい関数オブジェクトを作成します.したがって,1サイクルまたは頻繁に実行される関数でFunction()コンストラクション関数を呼び出す効率は非常に低い.逆に,関数数面量は遭遇するたびに再コンパイルされるわけではない. Function()コンストラクション関数で関数を作成する場合、典型的な役割ドメインに従わず、常にトップレベルの関数として実行されています.
関数キー定義に比べてFunction()コンストラクタは独自の特徴があり、使いにくいことが多いため、この技術は一般的にあまり使われません.関数の数値面量式と関数キー定義は非常に近い.前述の違いを考慮すると,文字通り量の匿名関数はOS X 10.4.3のいくつかのwebkitのエンジンの下でバグがあるというメッセージがあるが,我々が普段言っている匿名関数はいずれも関数デジタル面量形式の匿名関数を指す.詳細については、『JavaScript:The Definitive Guide,5 th Edition』のFunctionsの章を参照してください.
三、匿名関数のコードパターン
昨日hedger wang彼のブログで紹介したいくつかの匿名関数のコードモード:
エラー・モード:機能しないため、ブラウザは構文エラーを報告します.函数面量:まず関数オブジェクトを宣言し、それを実行する. 優先表現:Javascript実行式は括弧の内側から外側になるので、括弧で宣言された関数を強制的に実行できます. Voidオペレータ:括弧で囲まれていない個別のオペランドをvoidオペレータで実行します.
この3つの方法は同じで、hedger wangは個人的な理由で3つ目が好きで、実際の応用で私が見たものと使ったものはすべて1つ目です.
四、匿名関数の応用『Javascriptのモジュールモード』最初の言葉は「グローバル変数は悪魔」.varキーワードと組み合わせて、匿名関数は、グローバル変数の汚染をもたらさずにページにJavascriptを書き込むことを効果的に保証します.これはよく知られていないページにJavascriptを追加するときに非常に効果的で、優美です.実際,YUIおよびそれに対応する例では匿名関数が多く用いられ,他のJavascriptライブラリでも多く用いられている. Javascriptの関数式プログラミングの礎.具体的には『関数式プログラミング技術で美しいJavaScriptを作成する』と『関数式JavaScriptプログラミングガイド』をご覧ください.
(function($){
// code
})(jQuery);
これから始めます!プログラマーはgoogleとbaiduの方法を知っています.同じように私も...ああ!これはjavascriptの匿名関数だったのか.この匿名関数は何ですか?ゆっくり勉強しましょう.JavaScript定義関数には、一般的に次の3つの方法があります.1.関数キー文:
function Name(a) {
return a;
}
2.関数数面量(Function Literals):
var Name = function(a){
return a;
}
3.Function()コンストラクション関数:var Name=new Function('a','turn a;')上の3つの方法で同じメソッド関数Nameが定義されています.1つ目は最も一般的な方法で、後の2つは1つの関数を変数Nameにコピーしますが、この2つの関数には名前がありません.これが匿名関数なのでしょうか.次の説明を見てみましょう.関数数の面量とFunction()コンストラクション関数には違いがあります!(1). 関数の数値面量は匿名の関数であり、構文では任意の関数名を指定できます.再帰関数を書くときは自分で呼び出すことができますが、Function()を使用して関数を構築することはできません.
var f = function fact(x) {
if (x < = 1)
return 1;
else
return x*fact(x-1);
};
(2). Function()コンストラクション関数を使用すると、実行時にJavascriptコードを動的に作成およびコンパイルできます.この方法ではグローバル関数eval()に似ています.(3). Function()コンストラクション関数は、実行するたびに関数本体を解析し、新しい関数オブジェクトを作成します.したがって,1サイクルまたは頻繁に実行される関数でFunction()コンストラクション関数を呼び出す効率は非常に低い.逆に,関数数面量は遭遇するたびに再コンパイルされるわけではない.(4). Function()コンストラクション関数を使用して関数を作成する場合、典型的な役割ドメインには従いません.これは常にトップレベルの関数として実行されています.
var y = "global";
function constructFunction() {
var y = "local";
return new Function("return y"); //
}
alert(constructFunction()()); // "global"
ここではFunctionオブジェクトという名前にも触れています.FunctionオブジェクトはJavaScriptの固有のオブジェクトで、すべての関数は実際にはFunctionオブジェクトです.だから上の3つはfunctionオブジェクトです.以上、functionオブジェクトは、通常の方法、構築方法で関数を作成することができ、関数に名前を付けなくてもよい(匿名関数).匿名関数を続け、その名の通り、匿名関数は実際の名前のない関数です.例えば、上記の例を挙げます.関数の名前を消して、2、3が関数であるかどうかを判断します.
alert(typeof function(){}); // "function"
alert(typeof function(a){return a;}); // "function"
alert(typeof new Function("a","return a;")) // "function"
いずれもfunctionオブジェクトを返しますが、名前はないようですが、確かに関数です.では、匿名関数を呼び出すにはどうすればいいのでしょうか.関数を呼び出すには、それを位置決めし、参照する方法が必要です.だから、名前を探すのを手伝う必要があります.これがこの例2,3「Name」の役割です.そしてこれも私たちがよく見かけるフォーマットです.ここでは、開いたばかりのjQueryコード、すなわち()を使用して匿名関数を囲み、後にカッコ(パラメータリストを含む)を1対追加する方法もあります.次のコードを猫にしましょう.
alert((function(x,y){return x+y;})(2,3)); // "5"
alert((new Function("x","y","return x*y;"))(2,3)); // "6"
多くの人が不思議に思うかもしれませんが、なぜこの方法が呼び出されたのでしょうか.忙しくなくてもセグメントコードを見ればわかるかもしれません.
// abc
var abc=function(x,y){return x+y;};
alert((abc).constructor==(function(x,y){return x+y;}).constructor);
// abc constructor constructor 。 , 。
このアプリがまだおかしいと思ったら、私がネットで見た説明を見てみましょう.カッコは、私たちの式を組み合わせてブロック化し、各ブロック、すなわち各ペアのカッコには戻り値があります.この戻り値は、実際にはカッコ内の式の戻り値です.したがって,一対の括弧で匿名関数を囲むと,実際には括弧対が匿名関数のFunctionオブジェクトを返す.したがって,括弧対に匿名関数を加えると,名前付き関数のようにその参照位置が得られる.したがって、この参照変数にパラメータリストを付けると、通常の関数の呼び出し形式が実現されます.最後に匿名関数のコードパターンを見てみましょう.エラー・モード:機能しないため、ブラウザは構文エラーを報告します.function(){ alert(1); }(); 1.関数オブジェクトを宣言してから実行します.(function(){ alert(1); } ) ( ); 2.優先式:Javascript実行式は括弧の内側から外側になるので、括弧で宣言された関数を強制的に実行できます.( function(){ alert(2); } ( ) ); 3.Voidオペレータ:丸カッコで囲まれていない個別のオペランドをvoidオペレータで実行します.void function(){ alert(3); }()この3つの方法は同じで、あなたの考えをそのように見ました.ほほほ!これでだいぶ悪くなった.今回はわかりましたが、最初のjQueryは手紙の数字の面量だったのですね.(匿名関数)(パラメータ)(function($){})(jQuery);
一、匿名関数とは何ですか.
Javascriptで関数を定義するには、一般的に次の3つの方法があります.
function fnMethodName(x){alert(x);}
var fnMethodName = function(x){alert(x);}
var fnMethodName = new Function('x','alert(x);')
二、関数数面量とFunction()構造関数の違い
var f = function fact(x) { if (x < = 1) return 1; else return x*fact(x-1); };
var y = "global"; function constructFunction() { var y = "local"; return new Function("return y"); // } alert(constructFunction()()); // "global"
関数キー定義に比べてFunction()コンストラクタは独自の特徴があり、使いにくいことが多いため、この技術は一般的にあまり使われません.関数の数値面量式と関数キー定義は非常に近い.前述の違いを考慮すると,文字通り量の匿名関数はOS X 10.4.3のいくつかのwebkitのエンジンの下でバグがあるというメッセージがあるが,我々が普段言っている匿名関数はいずれも関数デジタル面量形式の匿名関数を指す.詳細については、『JavaScript:The Definitive Guide,5 th Edition』のFunctionsの章を参照してください.
三、匿名関数のコードパターン
昨日hedger wang彼のブログで紹介したいくつかの匿名関数のコードモード:
エラー・モード:機能しないため、ブラウザは構文エラーを報告します.
function(){ alert(1); }();
(function(){ alert(1); } ) ( );
( function(){ alert(2); } ( ) );
void function(){ alert(3); }()
この3つの方法は同じで、hedger wangは個人的な理由で3つ目が好きで、実際の応用で私が見たものと使ったものはすべて1つ目です.
四、匿名関数の応用