1. 程式人生 > >js基礎第一天 (全局變量,局部變量)

js基礎第一天 (全局變量,局部變量)

cti 是我 ons 五行 沒有 應該 聲明 長時間 urn

前言:今天我把變量這塊內容單獨放出來,是我覺的這也是個重點,我很早就知道變量這個東東,可惜一直半懂不懂的,每次出現復雜的寫法我就蒙圈了,今天我利用的好長時間把這塊內容弄明白。 初學者可以看看我下面的案例和詳細解釋,你們一定會恍然大悟,我今天就是這樣的感覺。雖然每天進度很慢,但是每天都有收獲,這就是積累成多。 現在感覺每天的時間不夠用,時間過的超快。今天過的都不知道是星期幾了。 聲明全局變量 1.最外層執行環境下聲明的變量是全局變量 2.不用var聲明的變量是全局變量 全局變量特點:任何作用域下都可以訪問變量中的值。
<script>
   text=5  //全局變量
   var
b=a //全局變量 function a(){ a=3 //全局變量 } </script>

聲明局部變量

1、函數中聲明的變量是局部變量 2、函數中的形參是局部變量 局部變量特定:函數執行後,函數生命周期結束。所以函數中的局部變量都會被系統刪除,所以局部變量在函數外是訪問不到的,除非使用return
<script>
   vara=123 //局部變量 
</script>

全局、局部變量案例分析

function show(){
    var a=b=c=10;
}
show()
console.log(b,c);
console.log(a);  
//結果是a報錯,b,c=10 //看到這個案例的同學註意以上說的全局變量的特點

詳細解釋:因為a是使用var聲明的是局部變量,函數外訪問不到,而且函數外面也沒有聲明a,所以報錯。而b,c 沒用var聲明,是全局變量,所以函數外可以訪問到。

  var a = 10;
   function test(){
     a = 100;
     alert(a);
     alert(this.a);
     var a;
    alert(a)
   }
   test()
 //結果 100 10 100
詳細解釋:js在執行前會對整本文件的聲明部分做完整分析,從而確定變量的作用域,所以在函數test執行前。
1、由於第6行聲明了局部變量,所以函數內部的a都指向已經聲明的局部變量,所以第4行輸出100.
2、第5行輸出this.a,我們都知道函數內部的this指針指向的是函數的調用者,在這裏函數test被全局對象調用,所以this指向全局對象window,所以this.a=window.a,一開始生命了全局變量a=10,所以第5行結果為10.
3、第七行輸出結果為100,因為局部變量a在第3行已經被賦值了100,所以直接輸出局部變量a的值。

var a = 100;
function test(){
  console.log(a);
  var a= 10;
  console.log(a);
}
text()//undefinde 10

詳細解釋 1、在這個函數中,執行第3行前,可以認為已經聲明了變量a,但是並沒有定義(這裏說的賦值),所以第3行結果是空
2、執行第4行a=10後,變量a的值為10.所以第5行輸出結果是10.

var a =100;
function test(){
 alert(a)
  a=10
 alert(a)
}
test();
alert(a) //100 10 10
詳細解釋 1、我們都知道在函數內部,一般用var聲明的為局部變量,沒用var聲明的一般為全局變量 2、在text函數內,a=10聲明了一個全局變量,所以第3行的a應該輸出全局變量的值,而在函數執行之前已經聲明過一個全局變量並賦值100,所以這裏第3行輸出100 3、第四行給全局變量a重新賦值10,所以全局變量a的值變成10,所以第五行輸出10. 4、而在函數test外部,第8行輸出全局變量的值,因為全局變量被重新賦值為10,所以結果是10.

 

js基礎第一天 (全局變量,局部變量)