JS函数体内变量提升

 var a=1; 尽管作为全局变量在函数体外已经定义

但对于函数体,a是在其中的a的定义,即函数体内的var a=1; 才决定了a是属于函数的局部变量,因此全局变量a是在此失效的

而又由于a++的操作在局部var 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中,这个属性的值是可以被更改的,但是也应该避免覆盖。

你可能感兴趣的:(JavaScript)