- a = "a";//隐式声明并初始化一个全局变量a
- function check(){
- a = "aa";//隐式改变全局变量a的值
- alert("局部:a = "+a);//提示"aa"
- if(a == "aa") {
- var b = "b";//定义局部变量b
- alert("局部:b = "+b);//提示"b"
- }
- alert("半局部: b = " + b);//和C、C++、Java不同,javascript没有块级作用域,
- //在函数中声明的所有的变量,无论是哪里声明的,在整个函数中都是有定义的。
- //提示"b"
- }
- check();//调用方法check()
- alert("全局:a = "+a);//提示的应该是全局变量a的当前值"aa"
- alert("全局:b = "+b);//全局变量未声明,所以不会有任何提示信息
- var scope = "globle";//声明一个全局变量
- function f() {
- alert(scope);//由于在方法f()中有变量scope的声明,则识别为局部变量,而提示scope的值在初始化之前,所以应该提示为undefined
- var scope = "local";//变量在此处初始化
- alert(scope);//显示"local"
- }
- f();//调用方法f()
- //你可能会认为第一次调用会显示出"global",因为声明局部变量的var语句还没有被执行。
- //但是,由于这个作用域规则的限制,输出的不是"globle"。局部变量在整个函数内部都是有定义的,
- //这就意味着在整个函数体中隐藏了同名的全局变量。虽然局部变量在整个函数体中都是定义的,
- //但是在执行var scope="local";语句之前,它是不会被初始化的。因此,上面的代码等价于:
- function f(){
- var scope;
- alert(scope);
- scope = "local";
- alert(scope);
- }
- //该片段来自于http://www.codesnippet.cn/detail/161220138047.html
来源: http://www.codesnippet.cn/detail/161220138047.html