javascript做用域(整合)

做用域的几个概念:javascript

              一、JavaScript中的函数运行在它们被定义的做用域里,而不是它们被执行的做用域里.java

              二、全局变量拥有全局做用域,函数内声明的变量只在函数体内有定义,做用域是局部性的。函数

              三、 在函数体内,局部变量的优先级高于全局变量。spa

               四、 定义全局变量的时候能够不须要var进行声明,定义局部变量的时候必须用var进行声明 。(一般状况下建议都用var声明)3d

 

做用域容易遇到的几个误区:blog

               1:全局变量和局部变量做用域混淆。(新手误区)ip

 

                           

                                  图 1                                       图 2作用域

                 

                    如图1和图2,当局部变量和全局变量重复时,局部变量优先级高于全局变量,图1中checkscope()方法中对scope用var从新进行了声明,所以改变和返回的是从新声明的局部变量scope。而图2中没有从新声明,所以checkscope()方法中改变和返回的是全局变量scope。io

                2:忽略变量提高的做用。console

                   

                                图 3

                 

                   如图3所示,第一次输出的不是理想中的"global",反而是undefined;这是由于在javascript中局部变量在函数体内始终是有定义的,函数体内的变量声明默认都提高到函数顶部,即checkscope()方法中实际执行顺序是:

                         function checkscope() {

                                var scope;

                                console.log(scope);

                                scope = "local";

                                console.log(scope);

                         }

 

                   3:使用var声明全局变量和不使用var声明全局变量。

                    

                 

相关文章
相关标签/搜索