在函数内部定义的全局变量,如果函数没有被调用,那么该全部变量是无效的。
在函数预编译期间,只会对函数的函数名、函数内各种标识符进行检索,建立索引
<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);弹出1