JavaScript中全局变量的深入探索
01 |
a = "a";//隐式声明并初始化一个全局变量a |
02 |
function check(){ |
03 |
a = "aa";//隐式改变全局变量a的值 |
04 |
alert("局部:a = "+a);//提示"aa" |
05 |
if(a == "aa") { |
06 |
var b = "b";//定义局部变量b |
07 |
alert("局部:b = "+b);//提示"b" |
08 |
} |
09 |
alert("半局部: b = " + b);//和C、C++、Java不同,javascript没有块级作用域, |
10 |
//在函数中声明的所有的变量,无论是哪里声明的,在整个函数中都是有定义的。 |
11 |
//提示"b" |
12 |
} |
13 |
check();//调用方法check() |
14 |
alert("全局:a = "+a);//提示的应该是全局变量a的当前值"aa" |
15 |
alert("全局:b = "+b);//全局变量未声明,所以不会有任何提示信息 |
16 |
17 |
|
18 |
var scope = "globle";//声明一个全局变量 |
19 |
function f() { |
20 |
alert(scope);//由于在方法f()中有变量scope的声明,则识别为局部变量,而提示scope的值在初始化之前,所以应该提示为undefined |
21 |
var scope = "local";//变量在此处初始化 |
22 |
alert(scope);//显示"local" |
23 |
} |
24 |
f();//调用方法f() |
25 |
|
26 |
//你可能会认为第一次调用会显示出"global",因为声明局部变量的var语句还没有被执行。 |
27 |
//但是,由于这个作用域规则的限制,输出的不是"globle"。局部变量在整个函数内部都是有定义的, |
28 |
//这就意味着在整个函数体中隐藏了同名的全局变量。虽然局部变量在整个函数体中都是定义的, |
29 |
//但是在执行var scope="local";语句之前,它是不会被初始化的。因此,上面的代码等价于: |
30 |
function f(){ |
31 |
var scope; |
32 |
alert(scope); |
33 |
scope = "local"; |
34 |
alert(scope); |
35 |
} |
摘抄自:开源中国
迷茫的过去,未知的未来,为了自己,也为了那份无法忘却的爱,努力成长,永不放弃~

浙公网安备 33010602011771号