javascriptの変数範囲

7432 ワード

javascriptの中の変数の範囲はずっと頭を使っていますが、実は少し分かりました.複雑ではありません.
入門の知識
理解する前に、次の2つの文を読む必要があります.
var left1="right";
left2="right";
説明します
  • 最初の文の意味は、先にleft 1という名前の変数を宣言してから、このleft 1変数
  • に値を付与します.
  • 第二文の意味は、「Right」という値をleft 2という名前の変数に割り当てて、「声明」という動作はありません.以下の点に注意してください.
  • は、賦課前に変数left 2を宣言する文(すなわち「var left 2」)が書かれていない場合、javascriptはこの変数を暗黙的に宣言し、
  • を賦与する.
    スコープ
    javascriptでは、一つのスコープ内の変数は大域的であり、大域的なものであるからこそ、その変数はそのサブスコープ内にも見られます.
    変数はグローバル(第一版)です.
    出力結果はoneoneです.
    <script language="javascript">
        var left="one";//      ,        
        function f() {   //  f           ,    left    ,   f    left      ,      
            document.write(left); //        one         
        }
        f();//  f   ,      one
        document.write(left);//        one         
    </script>
    
    何も言うことがないので、コメントを見てください.でも、ちょっと気になります.コードを変えてみたらどうなりますか?そこで第二版があります.
    変数はグローバル(第二版)です.
    出力結果はtwotwoです.
    <script language="javascript">
        var left="one";
        function f() {   
                left="two";  //       ++++++++++++++++++++++++++
                document.write(left); 
        }
        f();//  f   
        document.write(left);
    </script>
    
    これもよく分かります.プリントする前に変数leftが再割り当てされました.次のバージョンを見てください.
    変数はグローバル(第三版)です.
    出力結果はtwoonetwoです.
    <script language="javascript">
        var left="one";
        function f() {   
                var left;  //       ++++++++++++++++++++++++++
                left="two";  
                document.write(left); //   two
        }
        f();//  f   
        document.write(left);//   one
        f();//  f   ,      ++++++++++++++++++++++++++
    </script>
    
    第三版は比較的に重要です.サブスコープではグローバル変数です.(前にvarがあることに注意してください.)また同じ名前の変数leftを宣言しました.この変数leftは現在のスコープではグローバル変数です.以前はoneとして記録されていたleftは現在のスコープでは消えてしまいます.外(fメソッドの外)は、2つのleft変数が相互に分離されていることが分かります.
    鬼ごっこが好きなundefined(第一版)
    まずは簡単に出発します.
    <script language="javascript">
    <script language="javascript">
        var left;
        left="one";
        document.write(left);//   one
    </script>
    
          ,   undefined
    <script language="javascript">
        var left;
        document.write(left);//   undefined
    </script>
    
    
       ,   undefined,      ,    
    <script language="javascript">
        document.write(left);//   undefined
        var left;
        left="one";
    </script>
    
       ,left           ,javascript            left
                ,      ,     
    <script language="javascript">
        left="one";//     
        var left;    //        
        document.write(left);//   one
    </script>
    
    鬼ごっこが好きなundefined(第二版)
    サブスコープ、つまりfメソッド体を追加します.
    <script language="javascript">
    <script language="javascript">
        var left;
        function f() {   
                document.write(left); //   undefined
        }
        f();
    </script>
    
       ,   one,    
    <script language="javascript">
        var left;
        left="one";
        function f() {   
                document.write(left); //   one
        }
        f();
    </script>
    
       (  ),   undefined,         ,     left   
    <script language="javascript">
        var left;
        left="one";
        function f() { 
                var left;//      left  
                document.write(left); //   undefined
        }
        f();
    </script>
    
       ,  ,   two,         ,     left   
    <script language="javascript">
        var left;
        left="one";
        function f() { 
                var left;//      left  
                left="two";
                document.write(left); //   two
        }
        f();
    </script>
    
       (  ),   twoone,f      ,f    left     ,     left    
    <script language="javascript">
        var left;
        left="one";
        function f() { 
                var left;//      left  
                left="two";
                document.write(left); //   two
        }
        f();
        document.write(left); //   one
    </script>
    
       (      ),   undefinedone
             var left;  ,              ,   left             
          ,     document.write     ,               (var     )    
      var   write  ,   var   
    <script language="javascript">
        var left;
        left="one";
        function f() { 
                document.write(left); //   undefined
                var left;//      left
        }
        f();
        document.write(left); //   one
    </script>
    
    鬼ごっこが好きなundefined(第三版)
    鬼ごっこを始めましょう.
    第一段
    <script language="javascript">
        var left;
        left="one";
        function f() { 
                left="two";
                document.write(left); 
        }
        f();
        document.write(left); 
    </script>
    
    何をプリントアウトしますか?twotwo第二段
    <script language="javascript">
        var left;
        left="one";
        function f() { 
                left="two";
                document.write(left); 
        }
        document.write(left); 
        f();
    </script>
    
    何をプリントアウトしますか?onetwo第三段
    <script language="javascript">
        var left;
        left="one";
        function f() { 
                left="two";
                document.write(left); 
        }
        document.write(left); 
        f();
        document.write(left); 
    </script>
    
    何をプリントアウトしますか?onetwotwo第四段
    <script language="javascript">
        var left;
        function f() { 
                document.write(left); 
                left="two";
        }
        document.write(left); 
        f();
        document.write(left); 
    </script>
    
    何をプリントアウトしますか?undefinedundefinedtwo上の四段の中で、ずっと一つの作用域しかないです.二つのft変数がお互いに喧嘩している状況がないので、判断しやすいでしょう.次は二つの作用域です.喧嘩を始めました.
    第五段(第三段と比較してください.)
    <script language="javascript">
        var left;
        left="one";
        function f() { 
                var left="two";
                document.write(left); 
        }
        document.write(left); 
        f();
        document.write(left); 
    </script>
    
    何をプリントアウトしますか?onetwoone第六段(第四段と比較してください.)
    <script language="javascript">
        var left;
        left="one";
        function f() { 
                var left;
                document.write(left); 
                left="two";
        }
        document.write(left); 
        f();
        document.write(left); 
    </script>
    
    何をプリントアウトしますか?oneundefinedone第六段
    <script language="javascript">
        var left;
        left="one";
        function f() { 
                document.write(left); 
                var left="two";
        }
        document.write(left); 
        f();
        document.write(left); 
    </script>
    
    何をプリントアウトしますか?oneundefinedoneは、このセクションは第5のセクションと同様であり、var left="two";は、var left;left="two";と見なされ、var left;は最上部に浮いて優先的に実行されるので、第5のセクションと同様である.
    第七段
    <script language="javascript">
        var left;
        left="one";
        function f() { 
                document.write(left); 
                var left="two";
                document.write(left); 
        }
        document.write(left); 
        f();
        document.write(left); 
    </script>
    
    何をプリントアウトしますか?oneundefinedtwoone、説明しない