JS笔记:局部变量与全局变量

JS笔记:局部变量与全局变量

1.JavaScript中,变量无需事先声明可以直接使用,并且都是动态类型,类型可以随时更改,但它也具有局部变量和全局变量之分:脚本中直接定义的变量是全局变量,函数中定义的变量是局部变量,如下示例:

<body>
<script type="text/javascript">
    var scope='global'; // global variable
    function testScope(){
            var scope='local'; // local variable
            alert(scope);
    }
    testScope();
script>
body>

在局部变量和全局变量同名时,局部变量暂时覆盖全局变量来被使用,上述代码运行结果:

local

2.但是与Java、C等语言不同的是,JavaScript并没有块范围的概念,例如示例代码:

<body>
<script type="text/javascript">
    var scope='global'; // global variable
    function testScope(){
            var scope='local'; // local variable
            for(var i=0;i<10;++i){
                document.write(i);
            }
            document.writeln("
after for loop, i is "
+i); } testScope();
script> body>

运行结果为:

0123456789
after for loop, i is 10

可见,出了for循环,i仍然存在;所以这个特性有时会出现一些奇怪的情况,需要我们知道,比如下面这个例子的情况:

<body>
<script type="text/javascript">
    var scope='global'; // global variable
    function testScope(){
            document.writeln(scope);
            var scope='local'; // @1
            document.writeln("
"
+scope); } testScope();
script> body>

第一次试验,运行结果是:

undefined 
local

可以看出,第一次写出的scope并非是全局变量’global’而是undefined,第二次确实是局部变量’local’了,如果将’@1’这行代码注释掉,进行第二次试验,则运行结果为:

global 
global

就可以正确的引用全局变量了。这样的情况发生的原因是:定义变量时使用var和不使用var关键字是有区别的,区别在于,使用var时,程序会强制定义一个新变量,不使用var时,程序会在上下文中寻找这个变量,只有在该变量不存在的情况下,程序才会定义一个新变量。

所以,当存在’@1’这行代码时,直接使用scope变量,程序会在上下文中寻找这个变量,这时是存在局部变量scope的,只不过并未赋值,所以这时是undefined,定义过之后,该变量被赋值了,打印出来自然就是所赋的值’local’了,这就是第一次试验的结果;当不存在’@1’这行代码时,直接使用scope变量,程序在上下文中寻找,存在全局变量scope,则使用,于是出现第二次试验的结果了。所以在JS中使用变量需要尽量规范,避免出现奇怪的现象。

你可能感兴趣的:(Web前端)