預編譯基礎栗子

預編譯函數

簡單來講spa

函數聲明總體提高code

變量 聲明提高對象

深刻解說io

  1. 預編譯前奏 :console

    1. 任何變量,若是未經聲明就賦值的變量, 此變量爲全局對象全部 (暗示全局變量)
    2. 一切聲明的全局變量,全是window的屬性 var a = 123; ==> window.a = 123;
  2. 預編譯 :編譯

    1. 建立AO(Activation Object)(執行期上下文) AO{}
    2. 找形參和變量聲明,將變量和形參名做爲AO 的屬性名,值爲undefined AO{ a:undefined, b:undefined }
    3. 將實參和形參統一 AO{ a:1, b:undefined }
    4. 在函數體裏面找函數聲明,值賦予函數體 AO{ a:function a(){}, b:undefined, d:function d(){} }

    全局預編譯,生成一個GO對象(Global Object)function

例子:class

AO:{
    a: function a(){}
    b: undefined
    d: function d(){} 
}
function fn(a){
    console.log(a); 

    var a = 123;

    console.log(a); 

    function a(){}

    console.log(a); 

    var b = function(){}

    console.log(b);

    function d(){}
}
fn(1);複製代碼
相關文章
相關標籤/搜索