Javascriptの匿名関数(ブロックレベルのスコープを模したもの)
2199 ワード
JavaScriptにはブロックレベルのスコープ概念がない.つまり、ブロックレベルのステートメントで定義されている変数は、ステートメントではなく関数(外部関数)を含む変数で実際に作成されます.
1
2
3
4
5
6
1
2
3
4
5
6
7
1
2
3
いつでも、一時的に変数が必要であれば、私用ドメインを使ってもいいです.
1
2
3
4
5
6
7
この技術は大域作用域において関数の外部でしばしば用いられ,大域作用域に過剰な変数と関数の追加を制限する.
一般的には、グローバルスコープに変数と関数を追加することをできるだけ減らすべきです.
この方法は、匿名関数への参照がないので、関数の実行が完了すれば、その作用領域チェーンをすぐに廃棄することができるので、クローズドメモリの問題を減らすことができる.
知名ノート(Wiz)PromoteWiz=0から
1
2
3
4
5
6
function
outputNumber(count){
for
(
var
i=0;i<1000;i++){
alert(i);
}
alert(i);
//count
}
この関数はjava、C22003;などの言語の中で、変数iはfor循環語句の中で定義があるだけで、循環が終わって、iも廃棄されました.ただし、JavaScriptでは、変数iはoutput Number()の活動対象として定義されていますので、その定義が始まり、関数内部でアクセスできます.同じ変数を再宣言しても、その値は変わりません.1
2
3
4
5
6
7
function
outputNumber(count){
for
(
var
i=0;i<1000;i++){
alert(i);
}
var
i;
//
alert(i);
//count
}
匿名関数は、ブロックレベルのスコープを模倣し、この問題を回避するために使用され得る.ブロックレベルのスコープ(プライベートスコープとも称する)の匿名関数としてのシンタックスは以下の通りである.1
2
3
(
function
(){
//
})()
上記のコード定義は、関数宣言を小かっこに含めて匿名関数を呼び出します.これは関数式です.次のペアに続く小かっこは、すぐにこの関数を呼び出します.いつでも、一時的に変数が必要であれば、私用ドメインを使ってもいいです.
1
2
3
4
5
6
7
function
outputNumber(count){
(
function
(){
for
(
var
i=0;i<1000;i++){
alert(i);
})();
alert(i);
//
}
このように,私たちはforサイクルの外部にプライベートロールドメインを挿入した.匿名関数で定義された任意の変数は、実行終了時に破棄されます.この技術は大域作用域において関数の外部でしばしば用いられ,大域作用域に過剰な変数と関数の追加を制限する.
一般的には、グローバルスコープに変数と関数を追加することをできるだけ減らすべきです.
この方法は、匿名関数への参照がないので、関数の実行が完了すれば、その作用領域チェーンをすぐに廃棄することができるので、クローズドメモリの問題を減らすことができる.
知名ノート(Wiz)PromoteWiz=0から