手を取って教えます.JavaScriptの中でブロックレベルの作用領域を真似します.
2483 ワード
JavaScriptはブロックレベルのスコープの概念がないので、ブロックステートメントで定義された変数は、実際に関数に含まれています.
いくつかの場所で臨時変数を使用するには、このような文法を使って作成されたプライベートドメインがあります.
この技術は大域作用域で関数の外部に用いられ、大域作用域に過剰な変数と関数を追加することに制限される.
注意:このようにすれば、クローズドのメモリを減らすことができます.また、匿名関数への参照がないので、関数の実行が完了すれば、直ちに効果ドメインチェーンを廃棄できます.
function outputNumbers(count) {
for (var i = 0; i < count; i++) {
console.log(i);
}
console.log(i);//10
}
outputNumbers(10);
ここのiは関数outputNumbers()の活動対象に定義されているので、その定義から関数内部で自由にアクセスできます.このように同じ変数を再宣言しても、その値は変わりません.JavaScriptはこのような状況を無視します.function outputNumbers(count) {
for (var i = 0; i < count; i++) {
console.log(i);
}
var i;//
console.log(i);//10( )
}
outputNumbers(10);
ブロックレベルのスコープを模倣する匿名関数を使用することができ、構文は以下の通りである.(function(){
//
})();
上記のコードを定義し、直ちに匿名関数を呼び出しました.ここでは関数宣言をペアの括弧に入れます.これは関数式の書き方です.この関数は、次のペアの括弧に続くとすぐに呼び出されます.いくつかの場所で臨時変数を使用するには、このような文法を使って作成されたプライベートドメインがあります.
function outputNumbers(count) {
(function () {
for (var i = 0; i < count; i++) {
console.log(i);
}
})();
console.log(i);//
}
outputNumbers(10);
forループの外部にプライベートロールドメインを挿入したので、匿名関数で定義された任意の変数は、実行終了後に破棄されます.また、匿名関数が閉じているので、変数countにアクセスすることができます.この技術は大域作用域で関数の外部に用いられ、大域作用域に過剰な変数と関数を追加することに制限される.
注意:このようにすれば、クローズドのメモリを減らすことができます.また、匿名関数への参照がないので、関数の実行が完了すれば、直ちに効果ドメインチェーンを廃棄できます.