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>