相信你對全域變數一定不陌生,在函數作用域裡用a=1這種形式定義的變數會是一個全域變量,在全域作用域裡,用下面3種形式都可以創建對全域可見的命名:
<script><BR>var a = 1;<BR>b = 2;<BR>window.c = 3;<BR></script>
對於b=2這種方式,它其實和c是一樣的,在執行這個賦值語句的時候,會沿著作用域鏈尋找名字叫做b的變量,一直找到作用域鏈的頂端還沒有找到,於是給window添加一個屬性b然後賦值。
var與不var有兩個差別:
1 var的全域變數不能被刪除,因為delete智慧型刪除物件的可刪除的屬性,而透過var 定義的全域屬性會被標示為不可刪除。需要說明的是,delete不成功並不會拋錯,delete的回傳值是true|false。
2 var定義的全域變數會被提升,而不用var定義的全域變數不會被提升。可以看下面程式的執行結果:
<script><BR>alert(a);<BR>var a=1;<BR></script>
複製程式碼
複製程式碼
複製程式碼複製程式碼複製程式碼複製程式碼複製程式碼複製碼> 程式碼如下:<script><🎜>alert(a);//error, a undefined<🎜>a=1;<🎜></script>