js基础 局部变量和全局变量 做用域链 形参是局部变量

js基础 局部变量和全局变量 做用域链 形参是局部变量前端

 局部变量和全局变量函数

局部变量:在一个做用域(定义域)内定义的变量就是这个做用域内的局部变量。只能在做用域内被访问到。

全局变量:从广义上来看,全局变量也是一种局部变量。全局变量定义在全局,因此也叫全局变量。能够在任何地方都被访问到。
 spa

1 // b是在全局内部定义的变量,是全局变量,能够在任何地方访问到
2 var b = 2;
3 function fun(){
4 // 在函数内部定义的变量是局部变量,只能在该做用域内访问到
5 var a = 1;
6 console.log(a);
7 }
8 fun();
9 console.log(b);
10 console.log(a);


变量申明的原理:全局变量,在全局定义以后,会永久存在,任什么时候候,任何位置访问,都可以找到它。局部变量定义在函数内部的,函数定义的过程,并无真正的去定义这个局部变量,只有在执行函数的时候,才会当即定义这个局部变量,执行完以后,变量就被当即销毁了,在其余的地方访问变量的时候,找不到这个变量,因此会有一个引用错误,变量未定义。blog

1.4 做用域链ci

指的是咱们变量查找的一个规律:咱们能够在不一样的做用域内使用相同的标识符去命名变量。咱们在使用一个变量的时候,须要找到匹配的标识符,咱们有重复的,用哪个?若是在当前做用域有这个变量,就直接使用,若是当前做用域没有这个变量定义,会一层一层的从本层往外依次查找,遇到第一个就直接使用。相似于就近原则。

当碰见一个变量时,JS引擎会从其所在的做用域依次向外层查找,查找会在找到第一个匹配的标识符的时候中止。在多层嵌套的做用域中能够定义同名的标识符,发生“遮蔽效应”。
 作用域

1 // 全局变量
2 var a = 1;
3 function fun1(){
4 var a = 2;
5 function fun2(){
6 var a = 3;
7 console.log(a);    //由于本层有定义直接输出3
8 function fun3(){
9 console.log(a);  //自己没有a定义,会从本层出发依次向外查找,当找到定义时,直接执行。3
10 }
11 fun3();
12 }
13 fun2();
14 }
15 fun1();
16 console.log(a);   //1


若是变量声明时,不写var关键字,计算机会自动在全局做用域内给它进行一个声明,局部变量就强制性的变成了全局变量。这种状况是不合理,会形成一个全局变量的污染。因此,定义变量必须写var关键字。
 io

1 var a = 1;
2 // 至关于
3 // var a = 3;
4 function fun1(){
5 a = 2;
6 function fun2(){
7 a = 3;
8 console.log(a);    //由于本层有定义直接输出3
9 function fun3(){
10 console.log(a);  //自己没有a定义,会从本层出发依次向外查找,当找到定义时,直接执行。3
11 }
12 fun3();
13 }
14 fun2();
15 }
16 fun1();
17 console.log(a);

1.5 形参是局部变量console

形参是局部变量,形参的做用域是它定义的函数的内部。
 table

1 function fun(a){ 2 // 形参是局部变量 3 console.log(a); 4 } 5 fun(1); 6 console.log(a); WEB前端互动交流群 434623999
相关文章
相关标签/搜索