JavaScriptのスコープとクロージャ
このレッスンでは、話をすることです:
- JavaScriptのスコープ
- JavaScriptを閉鎖
スピーカー教師:ヘッド先生
A. JavaScriptのスコープ
セクションを包んブロックスコープブレース
{(; iは3 <I ++がVAR I = 1)のために
}
PS:JavaScriptの動的スコープではありません
関数f(){
警告(x)は、
}
関数f(){
F()
VAR X = 5。
}
F()。
二つの閉鎖.JavaScript
クロージャがクロージャの一般的な方法を作成するために、別の関数スコープ変数にアクセスする機能であり、それは別の関数で別の関数は、この関数のローカル変数に内部関数を作成することです。
//ローカル変数は閉鎖によって返すことができます
関数ボックス(){
VaRのユーザー= 'リー';
関数の戻り値は(){ 無名関数のローカル変数でボックス()を返す//
ユーザーを返します。
}。
}
アラート(箱()()); //ボックスから()()を直接匿名関数の戻り値を呼び出します
ここで、B =ボックス()。
アラート(B()); //別の無名関数の戻り値を呼び出します
クロージャを使用すると、利点を持っていますが、またその欠点:メモリに常駐することができますローカル変数は、グローバル変数の使用を避けること。(グローバル変数汚染は、各モジュールは、災害につながると呼ばれることができ、予測不可能性への応用を引き起こし、プライベート、ローカル変数のパッケージを使用することをお勧めします)。
//グローバル変数を介して蓄積します
年齢= 100 VAR; //グローバル変数
関数ボックス(){
++年齢; //モジュールレベル蓄積し、グローバル変数と呼ばれることができます
}
ボックス(); //関数を実行、累積
アラート(年齢); //グローバル変数の出力
//ローカル変数を蓄積することにより達成することができません
関数ボックス(){
年齢= 100でした。
++年齢; //が蓄積
年齢を返します。
}
警告(箱()); // 101
アラート(ボックス()); 初期化されているので、// 101は、達成することができません
//ローカル変数蓄積が閉鎖することによって達成することができます
関数ボックス(){
年齢= 100でした。
復帰機能(){
年齢++;
年齢を返します。
}
}
ボックスB = VAR(); //取得機能
アラートは、(B()); //無名関数を呼び出します
アラート(B()); // 2番目の呼び出し匿名関数、累積達成するために