JavaScriptいくつかのスコープ問題

1110 ワード

1、
var a = 0 ;

function f(){
  a = 1;
  console.log(a); //    a
} 

console.log(a); // a

f();
出力結果は:1、Functionで直接割当を宣言していないaが作用領域windowのグローバル変数であることがよく分かります.
2、
var a = 0;
 function test(){
      var a;
      console.log(a); //    a
      a = 1;
      console.log(a); //    a
} 
test();
conosle.log(a); // a
出力結果は:undefined 1 0
3、
    var a =0;
    function test(){
       console.log(a);
       var a = 1;
       console.log(a);
    }

    test();
    console.log(a);
出力結果は:undefined 1 0 
 
まとめ:
1.JavaScriptには二つの作用領域しか存在しません.グローバルスコープwindowと関数スコープfunction、外部のfunction domannネスト内部のfunction domann、これは閉包の原理です.
2.function domainではvarを使用せずに事前に宣言し、直接に値を割り当てたり呼び出したりする変数は前のロールエリアの同名変数にアクセスして、windowグローバルdomannまで行って、見つけられない場合はエラーを報告します.
3.var宣言変数の実行優先度が一番高いので、例3でtest()で初めてconsolie.log(a)が実行される前に、var宣言が事前に実行されましたが、a=1赋値は実行されていませんので、undefinedを出力します.