js函数做用域

1     //变量提早 并非赋值提早,变量a提早此时a的值为undefined,而同名的函数提早,将会覆盖变量a,使a的值为函数。
2      var a;
3      a=()=>{
4          console.log(11)
5      };
6      console.log(a);

 

1     // 改变变量a的声明位置,结果依然同样。究其缘由:变量提高,并不包含变量复制的提高。
2     a=()=>{};
3     var  a;
4     console.log(a);//a的值依然是函数。

 

也能够这么认为在声明变量和显示声明函数的时候,函数的值会覆盖变量。函数

对于变量覆盖:只是针对从新声明变量。spa

  • 同一个做用域中,会进行值得覆盖,函数覆盖变量;变量覆盖变量;函数覆盖函数。
  • 不一样做用域,不会出现覆盖状况。
1     var k;
2     var k=2;
3     console.log(k);
4      m=()=>{console.log(131231)};
5     var m;
6     console.log(m);
7     n=()=>{console.log(1)};
8     n=()=>{console.log(2)};
9     console.log(n);

1     //若是进行覆盖,不能够从新声明变量,直接调用改变。
2     var  cl1=22;
3     dd1=()=>{
4         cl1=33;
5     };
6     dd1();
7     console.log(cl1);

若是在声明变量不加var,他会从当前域中是否存在该变量,若是没有,继续去上一层做用域查找,若是有就覆盖,若是没有继续查找,直到查找到顶层做用域。最后没有的话。会将该变量挂载在window对象中做为属性或者方法。做为全局变量,咱们能够直接调用也能够直接使用window.变量名字
1     /**
2      * 若是在声明变量不加var,他会从当前域中是否存在该变量,若是没有,继续去上一层做用域查找,若是有就覆盖,若是没有继续查找,直到查找到
3      * 顶层做用域。最后没有的话。会将该变量挂载在window对象中。
4      */
5     fn=()=>{
6         a=2;
7     };
8     fn();
9     console.log(window.a)
关于函数中形参,至关于在函数局部做用域中声明一个变量 var 变量名。并不会覆盖不一样做用域的同名标识符。
 1     /**
 2      * 关于函数中形参,至关于在函数局部做用域中声明一个变量 var 变量名。并不会覆盖不一样做用域的同名标识符。
 3      */
 4     var cc;
 5     cc=123;
 6     cc1=(cc)=>{//至关于从新声明一个变量在函数局部做用域。var  cc;
 7         cc=2123;//对于形参cc从新赋值。arguments[0]=2123同样的效果。
 8         console.log(cc);
 9     };
10     cc1(cc);//注意在调用函数进行传参的时候传递的是值。对于基本类型传递的是数值。而对于对象传递是内存地址不是引用。
11     console.log(cc);
相关文章
相关标签/搜索