var a=1;尽管作为全局变量在函数体外已经定义
但对于函数体,a是在其中的a的定义,即函数体内的var a=1;才决定了a是属于函数的局部变量,因此全局变量a是在此失效的
而又由于a++的操作在局部a定义之前
所以第一个alert(a)显示的是 NaN(注:详细说明如下)
第二个alert则是正确被赋值的,显示为 1
var a=1;
function test(){
a++;
alert(a);
var a=1;
alert(a);
}
test();
注:
全局属性
NaN
的值表示不是一个数字(Not-A-Number)。NaN 属性的初始值就是 NaN,和
Number.NaN
的值一样。在现代浏览器中(ES5中),NaN
属性是一个不可配置(non-configurable),不可写(non-writable)的属性。但在ES3中,这个属性的值是可以被更改的,但是也应该避免覆盖。