關於JavaScript變量聲明及其初始化的問題


我們知道,js變量應通過var來定義,例如:

var a;

這種定義方式只定義了變量名,但沒給初值。不過,js在編譯時會自動賦予undefined初值。如果要給明確的初值可這樣定義:

var a = 123;

請看下面的代碼:

alert(a);
var a = 123;

上面的代碼在var之前就用到了變量。一般我們認為這樣的程序會報錯,可是實際運行后我們發現程序並未報錯,而是alert輸出了undefined(undefined也是個值)。這是為什么呢?

在回答這個問題之前,再看下面的代碼:

alert(a);
a = 123;

這段代碼與上一段代碼的區別在於去掉了var關鍵字。可是運行后我們發現程序報錯了。這又是為什么呢?

為回答這個問題,我們就必須了解js的一些內部機制。這篇教程說得非常細致。

首先,我們知道js里除了對象什么也沒有。那么上面的變量a又是什么呢?其實,在<script>...</script>標簽下(不在函數里)直接寫的var我們稱之為頂層變量,不過嚴格說來頂層變量不應該稱為變量,而是window對象的一個屬性。window對象在瀏覽器解析<script>...</script>標簽時會自動先查找出通過var定義的變量,然后馬上作為window的一個屬性,並初始化為undefined。並且,即使如果我們在var定義時給了初值,window的這個新屬性仍然被初始化為undefined。

回過頭來看看前面的代碼:

alert(a);
var a = 123;

這段代碼被解析后相當於這樣:

var a;
alert(a);
a = 123;

因此我們看出,alert輸出為undefined了。

再看看前面的另一段代碼:

alert(a);
a = 123;

這段代碼被解析時並未發現有var關鍵字,因此執行到alert(a)時,就等於執行alert(window.a),而window對象尚沒有a屬性,當然就報錯了。

再次強調,請仔細閱讀這篇教程,您一定收獲不小。同時也請您把前后各章節都仔細閱讀,相信對您提高js有相當大的幫助。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM