「JavaScript変数作用領域」に関する試験

2409 ワード

結論を先に言います
JavaScriptでは、変数宣言にvarを使用することを強く推奨しています.varを使用しないで変数を宣言することもできますが、本質的には違いがあります.
  • バンドvarは、「現在のスコープで変数を宣言し、値を賦与する」と表している.
  • varを持たないと、(内から外へ)割り当てが必要なオブジェクトを探して泡が立って、グローバル変数を汚染します.
  • PS.本質的な原因を理解するためには、<>の第7章を参照することができます.本質的な原因は、JavaScriptがvarで宣言した変数を“静的な作用領域”と見なし、宣言されていない変数を“グローバルスコープ”と見なしています.
    試験01--変数をvarで宣言する
    window.str = 'GuangDong';
    
    function t1(){
        var str = 'GuangZhou';
        function t2(){
            var str = 'FoShan';
            alert(str);
        }
        t2();
    }
    
    t1();
    alert(window.str);
    
    出力結果:
    FoShan
    GuangDong
    
    試験02--泡を出して探します.
    window.str = 'GuangDong';
    
    function t1(){
        var str = 'GuangZhou';
        function t2(){
            alert(str);
        }
        t2();
    }
    
    t1();
    alert(window.str);
    
    出力結果:
    GuangZhou
    GuangDong
    
    解析:t2()関数内のstr変数はvarを使っていないので、「賦値」だけでは、外に泡が出て、賦課すべき変数を探します.t1()関数のvar str = 'GuangZhou'を発見しました.
    対照的に、PHPは声明がなければalert('GuangZhou')、エラーが発生します.
    $str = 'GuangDong';
    
    function t1(){
        $str = 'GuangZhou';
        function t2(){
            echo $str;
        }
        t2();
    }
    
    t1();
    
    このPHPのデモはエラーを報告します.
    PHP Notice:Unidefined variable
    試験03--発泡探し
    window.str = 'GuangDong';
    
    function t1(){
        function t2(){
            alert(str);
        }
        t2();
    }
    
    t1();
    alert(window.str);
    
    出力結果:
    GuangDong
    GuangDong
    
    解析:stralert(str)内部でt2()変数が見つからず、泡が外に探してもstr変数が見つからず、泡が外に探し続けています.大域変数t1()が発見されたので、strを出力します.
    試験04--グローバル変数が汚染されています.
    window.str = 'GuangDong';
    
    function t1(){
        function t2(){
            str = 'FoShan';
            alert(str);
        }
        t2();
    }
    
    t1();
    alert(window.str);
    
    出力結果:
    FoShan
    FoShan
    
    解析:window.strの中のGuangDong変数はt2()を使用していないので、泡を出して外を探して、strを見つけて、その割当値をvarにします.したがって、グローバル変数window.strを出力すると、FoShanを出力します.
    参考文献
  • <>第7章--名前と役割領域
  • 文章の歴史
  • 2016/12/21(初回発表)
  • 2017/07/13は<>;を参照しました.
  • もしあなたが私の文章があなたに役立つと思うなら、改善のためのアドバイスや「好き」をしてください.