1

より高いスコープで初期化され、後で現在のスコープで初期化された変数に対して未定義になるのはなぜですか?

現在のコード出力: 最初の「undefined」と 2 番目の「i'm local」。

なぜこうなった?この問題は何ですか? この問題の名前は何ですか? その背後にあるコンセプトは何ですか?

var testVar = "i'm global";
function example( ) {
    alert(testVar); 
    var testVar = "i'm local";
    alert(testVar);   
 }
 example();
4

4 に答える 4

1

testVar関数のスコープに入ると のexample宣言があるため、ローカルのみを取得するためtestVar、 をオーバーライドしますtestVar。butの宣言があるので、最初alertに取得する必要があります。2 番目のアラートでは、が既に定義されているため、ローカル値を取得します。undefinedtestVaralerttestVar

外部変数を取得するには、別の方法で名前を付けるか、引数として渡します。

var testVar = "i'm global";
function example(globalTestVar) {
    alert(globalTestVar); 
    var testVar = "i'm local";
    alert(testVar);   
 }
 example(testVar);     
于 2013-02-24T13:06:04.270 に答える
0

あなたのコードは以下と同等です:

<script type="text/javascript">
   var testVar = "i'm global";
   function example( ) {
      var testVar;
      alert(testVar); 
      testVar = "i'm local";
      alert(testVar);   
    }
    example();     
</script>

したがって、最初alertのローカル変数testvarは未定義です。varスコープの先頭に移動します。

于 2013-02-24T13:04:54.440 に答える
-1

varをローカル変数から削除します。これにより、ブラウザーtestVarは、最初のアラートの時点では定義されていないローカル変数と見なされます。 http://jsfiddle.net/N5Yf3/

于 2013-02-24T13:07:28.753 に答える
-1

これを試してみると、両方に警告が表示されます。最初testVarに関数内で定義する必要があります。

 <script type="text/javascript">
    function example( ) {
        var testVar = "i'm global";
        alert(testVar); 
        var testVar = "i'm local";
        alert(testVar);   

     }
         example();     
</script>
于 2013-02-24T13:08:08.117 に答える