js中变量的作用域,let,const详解

1)函数体中的在函数体外不能用

2)如果两个函数使用相同的变量名,只要在函数内部,就不冲突

3)函数成员可以访问函数内部的成员,反之不行

4)假设,内部函数变量和外部函数的变量重名,由内向外查找。

提升变量的作用域

1 function fun() {
2 
3    var x = "x" + y;
4    console.log(x);
5    var y = 'y';
6 }

结果:undefined

说明:js执行引擎,自动提升了y的声明,但是不会提升变量y的赋值

1 function fun() {
2 
3   var y;
4   var x = "x" + y;
5   console.log(x);
6   y = "y";
7 }

这个是js在建立之初就存在的特性。养成规范:所有的变量定义都放在函数的头部,不要乱放,便于代码维护。

1 function fun2() {
2   var x = 1,
3         y = x + 1,
4         z,i,a;
5   
6  // 之后随意用
7 }

全局变量

1 x = 1;
2 function f() {
3    console.log(x);
4 }
5 f();
6 console.log(x);

全局对象window

var x = 'xxx';
alert(x);
alert(window.x) ;// 默认的全局变量,都会自动绑定在window对象下

 

alert()这个函数本身也是一个window变量

1 var x = 'xxx';
2 window.alert(x);
3 var old_alert=window.alert;
4 window.alert = function() {
5 
6 };
7 // 发现alert()失效了

js实际上只会有一个全局作用域,任何变量(函数也可以视为变量),假设没有在函数作用范围内找到,就会向外查找,如果在全局作用域都没有找到,拨错refernceError

 

规范:

由于我们所有的全局变量都会绑定到我们的window上。如果不同的js文件,使用了相同的全局变量,会发生冲突:如何解决冲突?

1 // 唯一全局变量
2 var MyCode = {};
3 
4 // 定义全局变量
5 MyCode .name = "zhangsan";
6 MyCode .add = function (a, b) {
7      return a + b;
8 }

把自己的代码全部放到自己定义的唯一空间名字中,降低全局命名冲突的问题

jQuery就是这样干

 

局部变量用let,定义常量用const

 

posted on 2021-05-06 19:39  Love&Share  阅读(457)  评论(0编辑  收藏  举报

导航