Javascriptの匿名関数(ブロックレベルのスコープを模したもの)

2199 ワード

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