1. 程式人生 > 其它 >變數的作用域、let、const

變數的作用域、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>