javascript --- 声明提前(学习笔记)

声明提升

  1. 未声明变量
    console.log(a);
    在没有定义 a 的情况下,直接使用,会报错。
  2. 声明变量
    console.log(a);
    var a = 2;
    输出结果:undefined 并不会输出2。
    原因:把这个过程拆分成两个操作。JS在编译的时候,先将var a 声明提升,分配空间。在执行的过程中才会对变量a进行赋值操作。
  3. 声明函数
    console.log(foo);
    function foo(){}
    不会报错,与var一样,这个声明也会提前。

当var 与 function 爱上了同一个姑娘。

console.log(fo);
var fo = 3;
function fo(){}
输出结果:function fo(){}
原因: 谁让咱体积大,还能独立包揽作用域呢。咱就是优先级高。

当var 与 function 遇到了逻辑处理。

  1. var遇到了逻辑处理
    console.log(a)
    if(true){
    var a =2
    }else{
    var a =3
    }
    输出:undefined
    此处变量被提升了所以不报错。
  2. function 遇到了逻辑处理
    foo();
    if(true){
    function foo(console.log(2))
    }else{
    function foo(console.log(3))
    }
    报错。

怀疑是function绑定了"{}"的块作用域。具体是什么原因还需要向大神请教了。

原文地址:https://www.cnblogs.com/blank-string/p/6522187.html