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 |
} |
摘抄自:开源中国