首页 > 代码库 > 分析javascript中作用域

分析javascript中作用域

1.javascript中的作用域


正如其他语言一样,在javascript中,变量的作用域也有全局和局部作用域的划分。


2.全局作用域


1)所有在最外层定义(非函数体内定义)的变量拥有全局作用域

2)直接赋值的变量,自动默认为全局作用域

<span style="font-size:18px;">  <script>
        //函数体外
        var name = "第一个name";  //全局变量
        sex = "女"; //全局变量,因为直接赋值操作
        function test() {
            //函数体内
            age = 56;  //全局变量,因为没有加关键字var
            var name = "lucky";
        }
        alert(name);//返回第一个name
    </script></span>

3)所有window对象的属性拥有全局作用域。例如window.name等

 

3.局部作用域


1)在函数体内部用var定义的变量,这里注意一下,只要在函数体内,无论在哪个地方,因为函数内涉及到嵌套函数,用var定义的变量就是局部变量,如果没有加关键字var的话,系统会自动默认为全局变量

<span style="font-size:18px;"> <script>
        function test() {
            var name = "lucky";//在函数体内,局部变量
            alert(name);
        }
        test();//返回lucky
    </script></span>




4.全局作用域和局部作用域的区别


1)我们知道所谓的作用域就好比穿衣服一样,是可以层层嵌套的,最外层的永远是全局作用域,因为别人都可以看到你穿在外面的衣服。下面来看一个小例子。


<span style="font-size:18px;"> <script>
        
        var name = "名字";  //全局变量
   
        var people = function () {
            var name = "张三";  //局部变量
            height = 1.8;  //全局变量
            alert(name); //显示张三
            alert(window.name); //显示名字
           
        }
        people();
        alert(height);//显示1.8
    </script></span>




2)还是上述的例子,如果函数people中没有name这个变量,但是全局变量中有,又会发生什么变化呢?


<span style="font-size:18px;">   <script>
        
        var name = "名字";  //全局变量
        var people = function () {
           
            height = 1.8;  //全局变量
            alert(name); //显示名字
            alert(window.name); //显示名字
           
        }
        people();
        alert(height);//显示1.8
    </script></span>

解释:正如上述所说,作用域是层层嵌套的。当在javascript中寻找一个变量的时候,首先会从当前的作用域开始寻找,如果找到则停止;反之则从函数的外层继续寻找。在这个例子中先从people这个函数中寻找变量name;当没有找到的时候,转到外层作用域中寻找,此时name为“名字”


3)还是上述的例子,我么再略微的修改一下。还是从当前people函数的作用域查找,而people定义了该变量,但是还未到使用该变量,所以返回undifined。注意,在作用域内的变量,不管在函数的哪里声明,javascript都会在函数运行前在作用域中包含该对象。

<span style="font-size:18px;"> <script>
        
        var name = "名字";  //全局变量
   
        var people = function () {
           
            height = 1.8;  //全局变量
            alert(name); //显示undifined
            alert(window.name); //显示名字
            var name = "张三";  //局部变量
        }
        people();
        alert(height);//显示1.8
    </script></span>


5.小结

看了上述的几个例子,不知各位有没有搞懂。简单的说,只要能够区分局部变量和全局变量就oK了,另外在javascript中查找变量的时候,是遵从从里向外的原则,就这么简单。


分析javascript中作用域