变量的作用域、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>

浙公网安备 33010602011771号