今日、会社の小さなインターンが私に2つのJSコードの違いを尋ねました。
コード1:
<script type = "text/javascript"> var a = "hello"; function test(){var a;アラート(a); a = "world";アラート(a); } </script>コード2:
<script type = "text/javascript"> var a = "hello"; function test(){alert(a); a = "world";アラート(a); } </script>とても簡単だと思います。グローバル変数とローカル変数の間の範囲の問題ではありませんか? 「グローバル変数がローカル変数と複製されると、ローカル変数の範囲がグローバル変数の範囲を上書きします。ローカル変数の範囲を残した後、グローバル変数の範囲に戻ります。
<script> var a = 1; function test(){alert(a); var a = 2;アラート(a); } テスト();アラート(a); </script>結果は何ですか?出力1 2 1ですか?まあ、私はテストケースを彼女に送る前にそう思ったが、テスト出力の後...ランニングの結果は未定義だった2 1。その時、私は困惑して、私はJSについてあまり知らないことに気付いたので、先生のGUに尋ねたので、私は学習 +テストに一生懸命働いたので、次のように要約しました。
1. JavaScript変数の範囲は、メソッドブロックに従って分割されます(つまり、機能のブレース{}のペアで分割されます)。覚えておいてください、それは関数ブロックであり、その間、そしてブロックがスコープ分割基準ではない場合。次の例を見ることができます。
<script> function test2(){alert( "scope for scope:"+i); //値は値を割り当てられません(未宣言ではありません!非宣言されていない変数または関数を使用して致命的なエラーをスローし、スクリプトの実行を割り当てます)// //私は0、1、2、そして3の場合、ループがジャンプします} alert( "scope:"+i); //私は3です。スコープのためにすでに外にあることに注意してください。しかし、私はまだ(true){var j = 1;壊す; } alert(j); // jは1です。外側の範囲中に既にオンになっていることに注意してください。Jの値は(true){var k = 1; }アラート(k); // kの値は1です。すでに範囲外であることに注意してください。ただし、kの値は1} test2(); // if(外部関数スコープ)test2にのみ存在するi、j、およびk変数の出力は魔法の効果がありますか?アラート(i); //エラー!そうです、それはエラーです。変数Iが宣言されていない(割り当てられていない、test2関数の最初の行の出力を区別している)ため、スクリプトエラーが発生し、プログラムはここで終了します! alert( "このライン印刷はまだ出力されますか?"); //実行されていないアラート(j); //実行されていないアラート(k); //実行されていない</script>2。実行する前に、JavaScriptは、スクリプトファイル(ローカル変数を含む)の宣言部分の完全な分析を実施して、実際の変数の範囲を決定します。理解する方法は?次の例を参照してください。
<script> var a = 1; function test(){alert(a); // Aは未定義です!これはグローバル変数ではありません。これは、関数範囲(関数本体の4番目の行)で重複したローカル変数が宣言されているため、//グローバル変数Aが上書きされているため、JavaScriptは実行前にスクリプトファイル全体の定義部分の完全な分析を実行することを示しています。したがって、関数TEST()が実行される前に、//関数ボディの変数Aは、外部グローバル変数の代わりに内部ローカル変数を指します。しかし、この時点ではAは宣言されており、値が割り当てられていないため、未定義に出力されます。 a = 4アラート(a); // Aは4です、サスペンスはありませんか? Aはまだローカル変数です! var a; //ローカル変数aはアラート(a)を宣言します。 // aはまだ4です。これは、4が前に} test()に割り当てられているためです。アラート(a); // Aは1で、関数範囲内ではありません。Aの値はグローバル変数の値</script>3.グローバル変数がローカル変数と複製されると、ローカル変数の範囲がグローバル変数の範囲を上書きします。ローカル変数の範囲を離れた後、グローバル変数の範囲に戻ります。グローバル変数がローカル変数に遭遇するとき、グローバル変数を使用する方法は? window.globalvariablenameを使用します。
<script> var a = 1; function test(){alert(window.a); // aは1、ここではグローバル変数です! var a = 2; //ローカル変数Aは、この行のアラート(a)で定義されています。 // Aは2で、ここはローカル変数です! } テスト();アラート(a); // aは1です、それは関数範囲内ではなく、aの値はグローバル変数の値</script>もちろん、その他の記事については、以下の関連記事を参照してください。