javascript變數:全域?還是局部?這個得注意

來源:互聯網
上載者:User

javascript變數:全域?還是局部?這個得注意
在JS中,是沒有塊級範圍的

舉兩個個例子:

if語句塊:

if (true){var name='Ling';}alert(name);
輸出:Ling

 

 

for語句塊;

 

for(var i=0;i<10;i++) {var name='Ling';}alert(i);alert(name);

 

輸出:10

輸出:Ling

 

也就是說最後的結果都是window下全域變數:

 

alert(window.i);alert(window.name);

 

 

在Javascript的函數體中,有下面幾種情況需要注意:1、有無Var

如果有Var,在函數內部聲明變數是局部變數,如下例,讀取不到name的資料。

function box(){var name ='Ling';}alert(name);
如果把var去掉的話,那麼就會輸出:Ling,此時聲明的變數為全域變數。在寫代碼的過程中,不適用var就初始變數的話,會有很多意外發生,所以初始變數的時候一定要加上var。

 

 

2、全域變數和局部變數命名相同

 

var scope="global";  function t(){      alert(scope);      var scope="local"      alert(scope);  } 
最終的輸出結果是:

 

undefined

local

 

為什麼會出現這樣的結果?因為:

javascript 變數範圍

(1)全域變數的範圍是全域性的,即在整個Javascript程式中,全域變數作用處處都存在。定義在”script”塊中,在”function”函數外。
(2)局部變數的範圍是局部性的,在函數內部或函數參數時定義,作用範圍是從函數開始到結尾(注意此處說法)
(3)在函數內部,局部變數的優先順序比同名的全域變數優先順序要高;如果存在與全域變數名稱相同的局部變數(包括參數),那麼該全域變數將不再起作用。

 

原來是這個原因。不知道你看明白了沒有~~

 

那麼當全域變數和局部變數重名時,怎麼解決這個問題呢?

 

哈哈~~最簡單的當然就是避免全域變數和局部變數相遇咯~~

 

還有另外一種方法,window對象的所有屬性擁有全域範圍,用window.全域變數名,如下:

 

var scope="global";  function t(){      alert(window.scope);      var scope="local"      alert(scope);  }  

 

至此,問題也就說完了。

 

總結

上面的問題其實也反映的另一個問題,命名規範的問題,如果命名不規範,就會出現很多意想不到的問題,所以,花點時間上網查查幾種不同的命名的規範,這樣能在你編寫代碼的時候減少不必要的麻煩。

 



 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.