變數的作用域、let、const
阿新 • • 發佈:2022-03-29
變數的作用域
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 varx = 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>