JS基础_函数作用域

  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              *  - 调用函数时创建函数作用域,函数执行完毕以后,函数作用域销毁
 12              *     
 13              *  - 每调用一次函数就会创建一个新的函数作用域,他们之间是互相独立的
 14              *     
 15              *  - 在函数作用域中可以访问到全局作用域的变量
 16              *         在全局作用域中无法访问到函数作用域的变量
 17              *     
 18              *  - 当在函数作用域操作一个变量时,它会先在自身作用域中寻找,如果有就直接使用
 19              *         如果没有则向上一级作用域中寻找,直到找到全局作用域,
 20              *         如果全局作用域中依然没有找到,则会报错ReferenceError
 21              *     
 22              *  - 在函数中要访问全局变量可以使用window对象
 23              */
 24             
 25             //创建一个变量
 26             var a = 10;
 27             
 28             function fun(){
 29                 
 30                 var a = "我是fun函数中的变量a";
 31                 var b = 20;
 32                 
 33                 console.log("a = "+a); //a = 我是fun函数中的变量a
 34                 
 35                 function fun2(){
 36                     console.log("a = "+a);//a = 我是fun函数中的变量a
 37                     //不加window就是就近原则,加就是全局的
 38                     console.log("a = "+window.a);//a = 10
 39                 }
 40                 
 41                 fun2();
 42                  
 43             }
 44             
 45             fun();
 46             console.log("a = "+a);//a = 10
 47             //在全局作用域中无法访问到函数作用域的变量
 48             //console.log("b = "+b);//Uncaught ReferenceError: b is not defined
 49             
 50             
 51             //--------------------------------------------------------------------------------
 52             
 53             
 54             /*
 55              * 在函数作用域也有声明提前的特性,
 56              *     使用var关键字声明的变量,会在函数中所有的代码执行之前被声明
 57              *     函数声明也会在函数中所有的代码执行之前执行
 58              */
 59             
 60             function fun3(){ 
 61                 
 62                 fun4();
 63                 
 64                 console.log(a);//undefined
 65                 
 66                 var a = 35;
 67                 
 68                 function fun4(){ 
 69                     alert("I'm fun4");
 70                 }
 71                 
 72             }
 73             
 74             fun3(); 
 75             
 76             
 77             //--------------------------------------------------------------------------------
 78             
 79             
 80             var c = 33;
 81             
 82             /*
 83              * 在函数中,不使用var声明的变量都会成为全局变量
 84              */
 85             function fun5(){
 86                 
 87                 console.log("c = "+c);//c = 33
 88                 c = 10;
 89                 
 90                 //d没有使用var关键字,则会设置为全局变量
 91                 d = 100;
 92             }
 93             
 94             fun5();
 95             
 96             //在全局输出c
 97             console.log("d = "+d);//d = 100
 98             
 99             
100             //--------------------------------------------------------------------------------
101             
102             
103             var e = 23;
104             
105             /*
106              * 定义形参就相当于在函数作用域中声明了变量
107              */
108             function fun6(e){
109                 console.log("e = "+e); //e = undefined,相当于在函数作用域里面声明了一个变量var e;
110             }
111             
112             fun6();
113             
114             
115             
116         </script>
117     </head>
118     <body>
119     </body>
120 </html>

 

posted @ 2017-10-19 20:31  星辰郎周  阅读(378)  评论(0编辑  收藏  举报