在函數內部定義的全局變量,如果函數沒有被調用,那麼該全部變量是無效的。
在函數預編譯期間,只會對函數的函數名、函數內各種標識符進行檢索,建立索引
<script>
var a=1;
(function f(){
alert(a);
var a=2;
alert(a);
})()
</script>
上面函數內部聲明瞭同名變量a,所以在預編譯期間,JavaScript就用局部變量覆蓋掉了全局變量對函數內部的影響。而在執行期間,局部變量a還沒有賦值所以第一個alert的值爲undefined,第二個alert,局部變量的值爲2.
<script>
var a=1;
(function f(){
alert(a);
})()
</script>
上面函數內部沒有在聲明局部同名變量,所以全局變量起作用,alert(l);