js基礎第一天 (全局變量,局部變量)
阿新 • • 發佈:2017-05-26
cti 是我 ons 五行 沒有 應該 聲明 長時間 urn 前言:今天我把變量這塊內容單獨放出來,是我覺的這也是個重點,我很早就知道變量這個東東,可惜一直半懂不懂的,每次出現復雜的寫法我就蒙圈了,今天我利用的好長時間把這塊內容弄明白。
初學者可以看看我下面的案例和詳細解釋,你們一定會恍然大悟,我今天就是這樣的感覺。雖然每天進度很慢,但是每天都有收獲,這就是積累成多。
現在感覺每天的時間不夠用,時間過的超快。今天過的都不知道是星期幾了。
聲明全局變量
1.最外層執行環境下聲明的變量是全局變量
2.不用var聲明的變量是全局變量
全局變量特點:任何作用域下都可以訪問變量中的值。
2、執行第4行a=10後,變量a的值為10.所以第5行輸出結果是10.
<script> text=5 //全局變量 varb=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基礎第一天 (全局變量,局部變量)