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

2024-01-11  本文已影响0人  技术体验师_萦回

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

结论

提升:函数声明和变量声明提升;函数赋值和变量赋值不提升
优先级: 函数>变量
特殊情况: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
       *
       * ***/
上一篇 下一篇

猜你喜欢

热点阅读