Javascriptの匿名関数解説
2644 ワード
一、匿名関数とは?Javascriptで一つの関数を定義するには、一般的に次の3つの方法があります.
関数キー(function)文:
二、函数字面量とFunction()コンストラクタの違いは、函数字面量は匿名関数ですが、文法は任意の関数名を指定できます.再帰関数を書くときは自分を呼び出すことができます.Function()コンス関数を使うとだめです.
Function()コンストラクタは、毎回関数本体を解析して、新しい関数オブジェクトを作成します.したがって、1サイクルまたは頻繁に実行される関数でFunction()コンストラクタを呼び出すときの効率は非常に低い.逆に、手纸の数字面の量は毎回会っても新たにコンパイルするのではありません.
Function()のコンストラクタで関数を作成するときは、典型的な作用域に従わず、常にトップ関数として機能しています.
三、匿名関数のコードパターン昨日hedger wangは彼のブログで匿名関数のコードパターンをいくつか紹介しました.
エラーモード:動作できません.ブラウザは文法エラーを報告します.
四、匿名関数の適用
「Javascriptのモジュールモード」の最初の言葉は「グローバル変数は悪魔」です.varのキーワードに合わせて、匿名関数は、グローバル変数の汚染を引き起こすことなく、ページにJavascriptを書き込むことを効果的に保証することができる.これはあまり馴染みのないページにJavascriptを追加する時に非常に効果的で美しいです.実際、YUIとその対応例には匿名関数が多く使われており、他のJavascriptライブラリにも多く使われています.
Javascriptの関数式プログラミング programmingの礎石.具体的には「関数式プログラミング技術で美しいものを作成する」を見てください. JavaScriptと関数JavaScriptプログラミングガイド.
関数キー(function)文:
function fnMethodName(x){alert(x);}
函数字面量(Function Literals):
var fnMethodName = function(x){alert(x);}
Function()コンストラクタ:
var fnMethodName = new Function('x','alert(x);')
上記の3つの方法は同じ方法関数fnMethodNameを定義しています.1番目は最も一般的な方法です.後の2つはいずれも変数fnMethodNameに関数をコピーします.この関数は名前がない、すなわち匿名関数です.実は、かなり多くの言語に匿名関数があります.二、函数字面量とFunction()コンストラクタの違いは、函数字面量は匿名関数ですが、文法は任意の関数名を指定できます.再帰関数を書くときは自分を呼び出すことができます.Function()コンス関数を使うとだめです.
var f = function fact(x) {
if (x < = 1) return 1;
else return x*fact(x-1);
};
Function()構成関数は、Javascriptコードの動的な作成とコンパイルを実行することができます.この方法では大域関数eval()と似ている.Function()コンストラクタは、毎回関数本体を解析して、新しい関数オブジェクトを作成します.したがって、1サイクルまたは頻繁に実行される関数でFunction()コンストラクタを呼び出すときの効率は非常に低い.逆に、手纸の数字面の量は毎回会っても新たにコンパイルするのではありません.
Function()のコンストラクタで関数を作成するときは、典型的な作用域に従わず、常にトップ関数として機能しています.
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 Gide、5 th Edition」のFunctionsの章を読むことができます.三、匿名関数のコードパターン昨日hedger wangは彼のブログで匿名関数のコードパターンをいくつか紹介しました.
エラーモード:動作できません.ブラウザは文法エラーを報告します.
function(){
alert(1);
}();
まず関数オブジェクトを宣言してから実行します.
(function(){
alert(1);
} ) ( );
優先式:Javascriptは、括弧の内側から外側に表式を実行するので、声明の関数をかっこで強制的に実行することができます.
( function(){
alert(2);
} ( ) );
Void操作子:void操作で丸括弧で囲まれていない単独操作数を実行します.
void function(){
alert(3);
}()
この3つの方法は同じです.hedger wangは個人的な理由で3番目が好きです.実際の応用で見たものと使ったものは全部1番目です.四、匿名関数の適用
「Javascriptのモジュールモード」の最初の言葉は「グローバル変数は悪魔」です.varのキーワードに合わせて、匿名関数は、グローバル変数の汚染を引き起こすことなく、ページにJavascriptを書き込むことを効果的に保証することができる.これはあまり馴染みのないページにJavascriptを追加する時に非常に効果的で美しいです.実際、YUIとその対応例には匿名関数が多く使われており、他のJavascriptライブラリにも多く使われています.
Javascriptの関数式プログラミング programmingの礎石.具体的には「関数式プログラミング技術で美しいものを作成する」を見てください. JavaScriptと関数JavaScriptプログラミングガイド.