JavaScript的變量聲明和變量提高

最近在鞏固前端基礎,看到預解析和代碼執行部分,裏面講到提到了聲明提高,由於與咱們的平常很密切,根據我的所得,寫一篇文章。前端

1. 先解釋一下什麼叫預解析?瀏覽器

  • 顧名思義,提早解析。瀏覽器在執行代碼時,會在js運行前對帶有var和function關鍵字的代碼進行提早,這一過程被稱爲變量提高。預解析值會發生在經過var定義的變量和function上。

2. var關鍵字 函數

  • 經過var關鍵字定義的變量在進行預解析過程的時候,都是先聲明,而後賦值undefined。無論是否已經賦值,
// 1.
    alert(a);   // undefined
    var a = 1;
    
    // 2.
    alert(b);   //
    var b = function(){}
    
    // 3.
    alert(c);
    var c;

只要是var定義的,無論是變量仍是函數,都是先賦值undefined。若是是變量,也無論是否賦值,在預解析階段都會被賦值爲undefined。code

3. 關鍵字function字符串

  • 在進行預解析的時候,function此時已經被聲明而且被定義了,可是他存儲數據的那個空間裏面存儲的是代碼字符串,沒有任何意義。
alert(a);  // 彈出的是下面的function
    function a(){}
    
    // 注意:函數在預解析的時候會將代碼分紅兩部分來執行,第一部分是fn函數;第二部分是(),一個匿名函數,這時在執行過程當中會報錯。若是小括號帶參數,如(2),雖然不會報錯,也打印出2,可是並不能把fn執行,不能當作參數傳遞給fn函數。
相關文章
相關標籤/搜索