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