Life is going......

导航

Javascript 权威指南第五版 手记(2) 变量的作用域

                                    作用域的一些问题

 

写于平安夜

见书本第四章,先用四段简单的脚本,来做个,实例测试

 示例1:

var PH='you are big Pig Head';
function getAlert()
{
alert(PH);
}
getAlert();

函数体内显示PH这个全局变量
这个比较好理解,结果如下
you are big Pig Head 
示例2:

var PH='you are big Pig Head';
function getAlert()
{
alert(PH);
PH
='you are be modified to Mouse ';
alert(PH)
}
getAlert();

这里涉及到javascript的一个特性:

如果给一个未用var声明的变量赋值,javascript会隐式声明该变量。但是该变量会被创建为全局变量。

 

所以  分别显示

you are big Pig Head

you are be modified to Mouse

 示例3

var PH='you are big Pig Head';
function getAlert()
{
alert(PH);
var PH = 't';
}
getAlert();


这个结果是 undefined。比较怪。

这里又涉及到一个javascript比较特别的东西:

书上专业的词讲就是:javascript没有块作用域。对我这种块作用域都不知道是什么东西的人,这个解释不尽人意。所以更通俗的解释是:在函数中生命的 所有变量,无论在哪里声明的,在整个函数中都是有定义的。也就是哪怕在函数最结尾声明的,它实际上效果是在函数的最开头就声明了。


从上面的例子来看,就是在alert(PH)的时候,从顺序看,貌似后面的var PH还没有声明,所以结果应该是显示全局声明的PH。而实际上后面那个var PH='t',在整个函数都是有“势力范围”的,所以相当于
var PH='you are big Pig Head';

Code



这么看就明显能看出来,因为局部声明的PH变量,又由于局部变量的优先级高于同名的全局变量。所以这里声明完PH,又没有赋值,所以alert出来是 undefined

当然要不出现undefined,就必须在alert前对它赋值,比如

var PH='you are big Pig Head';
function getAlert()
{
var PH = 'you are right';
alert(PH);
}
getAlert();

posted on 2008-12-24 21:36  loaferdeng  阅读(151)  评论(0编辑  收藏  举报