js中變數的範圍

來源:互聯網
上載者:User

標籤:java   io   strong   for   ar   問題   cti   div   

我們都明白局部變數的優先順序大於全域變數,或者說內圍範圍的變數的優先順序比外圍的高。如果在當前範圍找不到此變數時,它就往外圍的範圍找。不過,在這之前,有一個值得注意的問題就是:究竟當前範圍有沒有這個變數。像javascript這樣的解釋型語言,基本分為兩個階段,編譯期(下面為符合大多數語言的稱呼習慣,改叫先行編譯)與運行期。在先行編譯階段,它是用函數來劃分範圍,然後逐層為var變數與函數定義分配記憶體空間,再然後對var變數進行特殊處理,統統賦初始值為undefined。

var  a=100; var  b= true ; function  test(){ alert(a); alert(b); b= false ; alert(b); var  a=200; alert(a); } test();第一次a輸出的是undefine,第一次b輸出的是true;第二次a的輸出的是200,第二次是b是false;把上面的例子修改一下 var  a=100; var  b= true ; function  test(){ alert(a); alert(b); var b= false ; alert(b); var  a=200; alert(a); } test();第一次a輸出的是undefine,第一次b輸出的是undefine;第二次a的輸出的是200,第二次是b是false; 

javascript的範圍是指變數和函數可以訪問的範圍,分為局部範圍和全域範圍,這個和C語言是類似的,但是不同點是javascript的範圍沒有塊級範圍,不像C語言的{}可以表示一個塊級的範圍,javascript只有函數範圍,在函數內部聲明的變數只能在函數體和子函數可以訪問,這個函數的外部不能訪

//沒有塊級範圍

if(true){

var n=1;

}

alert(n);//1

for(var i=0;i<10;i++){

}

alert(i);//10

上面的例子要是在C語言或者java中n和i會在{}語言執行完之後銷毀,在javascript中可以看到,它們並沒有銷毀,說明並沒有塊級範圍。

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.