js函数声明提升和变量声明提升

首先给出结论,然后再举例

结论

提升:函数声明和变量声明提升;函数赋值和变量赋值不提升
优先级: 函数>变量
特殊情况:if 语句中,函数声明提升时,会将前面的变量赋值一起提升出去

声明提升,赋值不提升

举例1:函数

console.log(foo);
function foo(){
    console.log("函数声明1");
}
var foo = function(){
 console.log("函数声明2");
}

输出为:

function foo(){
    console.log("函数声明");
}

举例2:变量

console.log(foo);
var foo;
foo = "变量";

输出为:

undefined

优先级

举例1

console.log(foo);
function foo(){
    console.log("函数声明");
}
var foo = "变量";

输出为:

function foo(){
    console.log("函数声明");
}

代码实际是:

function foo(){
    console.log("函数声明");
}
var foo;
console.log(foo);   
foo = "变量";

特殊情况:if 语句中,函数声明提升时,会将前面的变量赋值一起提升出去

      console.log(a); // undefined
      if (true) {
         a = 1;
         function a() {} // 把1提升出去了 
         a = 2;
       }
      console.log(a); // 1

看个例子

      console.log("1、value: " + a, " type: " + typeof a);
      var a = 0;
      if (true) {
        console.log("2、value: " + a, " type: " + typeof a);

        a = 1;
        console.log("3、value: " + a, " type: " + typeof a);

        a = 2;
        console.log("4、value: " + a, " type: " + typeof a);

        function a() {}
        a = 3;
        console.log("5、value: " + a, " type: " + typeof a);

        a = 4;
        console.log("6、value: " + a, " type: " + typeof a);
      }
      console.log("7、value: " + a, " type: " + typeof a);

输出结果如下:

      /***
       * 1、value: undefined  type: undefined
       * 2、value: function a() {}  type: function
       * 3、value: 1  type: number
       * 4、value: 2  type: number
       * 5、value: 3  type: number
       * 6、value: 4  type: number
       *  7、value: 2  type: number
       *
       * ***/
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容