变量的作用域、let、const

变量的作用域

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 
 7     <script>
 8         // 在js中,var定义变量有作用域
 9         //假设在函数体中声明,则在函数体外不可以使用~(非要想实现可以用闭包)
10         function aa() {
11             var x = 1;
12             x = x+1;
13         }
14         x = x +2;//Uncaught ReferenceError: x is not defined
15         //两个函数使用了相同的变量名,在各自函数内部,就不冲突
16         function aa1() {
17             var x = 1;
18             x = x+1;
19         }
20         //内部函数可以访问外部函数的成员,反之不行
21         function aa2() {
22 
23             var x = 1;
24 
25             function af() {
26                 var y = x+1; //2
27             }
28             var z = y +1;//报错
29         }
30 
31         //假设在js中函数查找变量从自身函数开始,由“内”向“外”查找,假设外部存在这个同名的函数变量,
32         //则内部函数会屏蔽外部函数的变量
33 
34         function cc() {
35             var y;
36             var x = "x"+ y;
37             console.log(x);
38             y = 'y';
39         }
40         //结果:x undefined
41         //说明:js执行引擎,自动提升了y的声明,但是不会提升变量y的赋值
42         //这个是在js建立之初就存在特性。规范:所有变量定义都放在函数的头部,不要乱放,便于代码维护
43             function f() {
44                 var x=1,
45                     y=3,
46                     z,s,a;
47             }
48 
49         //全局函数
50         x=1;
51         function f1() {
52             console.log(x);
53         }
54         f1();
55         console.log(x);
56 
57         //全局对象 window
58         var xx = 'xxx';
59         alert(xx);// window.alert(xx);这个函数本身也是一个window的变量
60         alert(window.xx);//默认所有的全局变量,都会自动绑定在window下
61 
62     </script>
63 </head>
64 <body>
65 
66 </body>
67 </html>
作用域
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6     <script>
 7         var x = 'xxx';
 8         window.alert(x);
 9 
10         var old_alert = window.alert;
11         // old_alert(x);
12         window.alert = function () {
13 
14         };
15         //alert失效了
16         window.alert(123);
17 
18         //恢复
19         window.alert = old_alert;
20         window.alert(456);
21 
22         //js实际上只有一个全局作用域,任何变量(函数也可以视为变量),假设没有在函数作用范围内找到
23         //就会向外查找,如果再全局作用域都没有找到,报错。RefrenceError
24 
25         //规范
26         //由于所有的全局变量都会绑定到window上,如果不同的js问加你,使用了相同的全局变量,怎么减少冲突?
27         //唯一全局变量
28             var wtyApp = {};
29             //定义全局变量
30             wtyApp.name = 'wty';
31             wtyApp.add = function (a,b) {
32                 return a+b;
33             }
34             //把自己代码放在自己定义的唯一空间名字,降低全局命名冲突问题
35 
36 
37         //局部作用域 let
38         function fa() {
39             for (var i = 0; i < 100; i++) {
40                 console.log(i);
41             }
42             console.log(i+1);//i出了作用域还可以使用
43         }
44         // ES6引入let关键字,解决局部作用域冲突问题
45         function fa1() {
46             for (let i = 0; i < 100; i++) {
47                 console.log(i);
48             }
49             console.log(i+1);//Uncaught ReferenceError: i is not defined
50         }
51 
52         //ES6引入常量 const
53         //在ES6之前,怎么定义常量:约定 全部大写字母命名变量就是常量
54 
55         const PI = '3.14';//只读变量
56         console.log(PI);
57         PI = '123';
58 
59 
60     </script>
61 </head>
62 <body>
63 
64 </body>
65 </html>

 

posted @ 2022-03-29 19:37  doremi429  阅读(33)  评论(0)    收藏  举报