Javascript:JSのグローバル変数と局部変数経典事例について!

2456 ワード



    var a =1;
    function test(){
       alert(a);
       var a = 2;
       alert(a);
    }
    test();
    alert(a);
 
みんなは結果を当てていくらになりますか?
出力1 2 1ですか?
えっと、テストのcaseを彼女に送る前にもそう思っていましたが、テスト出力後……運行結果はundefined 2 1です.その時、何も考えられませんでした.谷先生に聞いてみて、JSについてはよく分かりませんでした.だから、苦しい努力をして、+テストを勉強して、次のようにまとめました.
   一、Javascriptの変数のscopeは、方法ブロックによって分類される(すなわち、functionの大括弧のペアである{}で区別される).ぜひ覚えてください.functionブロックです.for、while、ifブロックは役割領域の区分基準ではありません.以下のいくつかの例を見てもいいです.

function test2(){
    alert ("before for scope:"+i);    // i   (      !                         )

                                                    //   i   underfined
    for(var i=0;i<3;i++){
        alert("in for scope:"+i);  // i    0、1、2,  i 3     
    }
    alert("after for scope:"+i);  // i   3,  ,     for scope  , i       3
    
    while(true){
        var j = 1;
        break;
    }
    alert(j);    // j   1,  ,     while scope  , j       1

    if(true){
        var k = 1;
    }
    alert(k);  //k   1,  ,     if scope  , k       1
}

test2();
//    (function scope  )       test2   function scope   i、j、k          ?
alert(i); //error!   , error,     i   (      ,  test2        ),      ,      !
alert("         ?"); //   
alert(j); //   
alert(k); //   
  二、Javascriptは実行前にスクリプトファイル全体の声明部分を完全に分析し(局所変数を含む)、実変数の作用領域を確定する.どう分かりますか?次の例を見てください.

    var a =1;
    function test(){
        alert(a); //a undefined!   a       ,     function scope      (      4 )         ,
                     //      a    ,    Javascript                      ,     test()   ,
                     //       a           .            .    a    ,    ,    undefined。
        a=4       
        alert(a);  //a 4,     ?    a       !
        var a;     //    a     
        alert(a);  //a   4,        4  a 
    }
    test();
    alert(a); //a 1,     function scope ,a         
    三、大域変数と局部変数が重名されると、局部変数のscopeは大域変数のscopeを上書きします.局部変数のscopeを離れると、また大域変数のscopeに戻ります.大域変数が局所変数に遭遇した場合、大域変数はどう使いますか?window.global Varable Nameを使います.

    var a =1;
    function test(){   
        alert(window.a);  //a 1,   a      !
        var a=2;     //    a     
        alert(a);  //a 2,   a      !
    }
    test();
    alert(a); //a 1,     function scope ,a