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     }

                            摘抄自:开源中国

posted @ 2013-08-07 12:48  艾可儿1314  阅读(268)  评论(0)    收藏  举报