全局作用域&&函数作用域

 1 <!DOCTYPE html>
 2 <html>
 3     <head>
 4         <meta charset="utf-8">
 5         <title></title>
 6     <script type="text/javascript">
 7     /*
 8     作用域
 9     指一个变量的作用的范围
10     一共有两种作用域
11     1.全局作用域
12     直接编写在script标签中的JS代码,都在全局作用域
13     全局作用域在页面打开时创建,在页面关闭时销毁
14     在全局作用域中有一个全局对象window,代表了浏览器的窗口,它由浏览器创建我们可以直接使用
15     在全局作用域中,
16     创建的变量都会作为window对象的属性保存
17     创建的方法都会作为window对象的方法保存
18     全局作用域中的变量都是全局变量,在页面的任意部分都可以访问到
19     
20     2.函数作用域
21     调用函数时创建函数作用域,函数执行完毕后,函数作用域销毁
22     每调用一次函数就会创建一个新的函数作用域,它们之间是相互独立的
23     在函数作用域中可以访问到全局作用域的变量,在全局作用域中无法访问到函数作用域的变量
24     当在函数作用域操作一个变量时,它会先在自身作用域中寻找,如果有就直接使用
25       如果没有则向上一级作用域中寻找,直到找到全局作用域,
26       如果全局作用域中依然没有找到,则会报错ReferenceError
27      在函数中访问全局变量可以使用window对象
28      
29     在函数作用域也有声明提前的特性
30     使用var关键字声明的变量,会在函数中所有的代码执行之前被声明
31     函数声明也会在函数中所有的代码执行之前执行
32     
33     */
34    
35    /*
36    变量的声明提前
37    使用var关键字声明的变量,会在所有的代码执行之前被声明
38    如果声明变量时不使用var关键字,则变量不会被声明提前
39    
40    函数的声明提前
41    使用函数声明形式创建的函数function函数(){}
42    它会在所有的变量执行之前就被创建,所以可以在声明之前调用
43    使用函数表达式创建的函数,不会被声明提前,所以不能在声明前调用
44    */
45    var a=10;
46    console.log(window.a);
47    fun();
48    //fun2();
49    //函数fun2提前声明,随时可以调用
50    function fun(){
51        console.log("hi fun");
52    }
53    //变量fun2提前声明,但是函数没有被提前声明,所以变量没有赋值,直到下面的代码才被赋值
54    var fun2=function(){
55        console.log("hi fun2");
56    }
57    var aa=123;
58    function f(){
59        alert(aa);//undefined 已被声明但是赋值
60        var aa=456;
61    }
62    f();
63    alert(aa);//123
64     </script>
65     <head>
66     <body>
67     </body>
68 </html>

 

posted @ 2019-07-21 14:33  zuiaimiusi  阅读(256)  评论(0编辑  收藏  举报