js函數(shù)聲明提升和變量聲明提升

首先給出結(jié)論,然后再舉例

結(jié)論

提升:函數(shù)聲明和變量聲明提升;函數(shù)賦值和變量賦值不提升
優(yōu)先級: 函數(shù)>變量
特殊情況:if 語句中,函數(shù)聲明提升時,會將前面的變量賦值一起提升出去

聲明提升,賦值不提升

舉例1:函數(shù)

console.log(foo);
function foo(){
    console.log("函數(shù)聲明1");
}
var foo = function(){
 console.log("函數(shù)聲明2");
}

輸出為:

function foo(){
    console.log("函數(shù)聲明");
}

舉例2:變量

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

輸出為:

undefined

優(yōu)先級

舉例1

console.log(foo);
function foo(){
    console.log("函數(shù)聲明");
}
var foo = "變量";

輸出為:

function foo(){
    console.log("函數(shù)聲明");
}

代碼實際是:

function foo(){
    console.log("函數(shù)聲明");
}
var foo;
console.log(foo);   
foo = "變量";

特殊情況:if 語句中,函數(shù)聲明提升時,會將前面的變量賦值一起提升出去

      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);

輸出結(jié)果如下:

      /***
       * 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
       *
       * ***/
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容