JavaScript中變量和函數聲明的提升

js代碼執行前,會有一個預編譯過程,該過程主要進行以下操作:語法檢查,和聲明提升。

聲明提升,又分為兩部分:變量聲明提升和函數聲明提升。

聲明提升的主要表現:先使用后聲明。

變量聲明提升:在當前代碼塊執行前,所有變量聲明會在預編譯階段提前完成,所有變量被賦值為undefined,可以理解為變量提前創建。

console.log(num);//undefined

var num = 100;

/*以上代碼可以理解為:

var num;

console.log(num);

num = 100;

*/

函數聲明提升:函數對象在預編譯階段,已經完全創建完畢,可以隨時使用。函數聲明提升高于變量聲明。

fn();

?function fn(){

?????console.log("我被提前創建完成!")//我被提前創建完成!

}

//同時聲明變量a和函數a

vara;

functiona() {}

alert(typeofa);//顯示的是"function",初步證明function的優先級高于var。

//先聲明函數后聲明變量,證明上邊的例子不是function覆蓋了變量

functiona() {}

vara;

alert(typeofa);//顯示的仍是"function",而不是"undefined",即function的優先級高于var。

//聲明了變量的同時賦值

functiona() {}

vara = 1;

alert(typeofa);//number,此時不是function了。

//說明:"var a=1"相當于"var a;a=1",即先聲明,后賦值,"a=1"相當于把a重新賦值了,自然就是number!

注意:if邏輯中聲明的函數,不參與函數聲明提升,但是參與變量聲明提升;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 前端07班 王語句JavaScript程序的執行單位為行(line),也就是一行一行地執行。一般情況下,每一行就是...
    ea203453e188閱讀 914評論 0 4
  • 第一章: JS簡介 從當初簡單的語言,變成了現在能夠處理復雜計算和交互,擁有閉包、匿名函數, 甚至元編程等...
    LaBaby_閱讀 1,703評論 0 6
  • 來源:仗劍走天涯! 關于javascript的作用域的一些總結,主要參考以上文章,加上自己的整理的理解。 近日對j...
    Michael_林閱讀 964評論 0 1
  • ` int a[]={1, 2, 3}; int &index(int i) { return a(i); } ...
    Ak99閱讀 363評論 0 0
  • 夜越深,越清醒,是一種怎樣的煎熬。
    征鴻_閱讀 162評論 0 0