JavaScript基礎-----預編譯

1. JavaScript 的運行:

    JavaScript有一個特點,就是瀏覽器在執行JavaScript代碼時會逐行執行,一行代碼錯誤,其後面的代碼塊都不會被執行出來,那麼,在腳本執行js引擎的時候,會產生三個步驟:

    (1)語法分析:檢測代碼有沒有錯誤

    (2)預編譯環節

    (3)根據編譯好的進行逐行執行(最後纔會進行逐行執行)

2. 預編譯環節:

    (1)在預編譯之前,頁面產生並創建了GO(Global Object)全局對象,也就是window對象,只需分析變量聲明和函數聲明;

    (2)在函數運行前的一瞬間,會生成一個AO(Active Object)對象;

    (3)開始分析參數,形參作爲 AO對象的屬性名,實參作爲AO對象的屬性值;

    (4)接下來分析變量聲明,變量名爲屬性名,變量值爲undefined,如果遇到同名的情況,則不做任何改變;

    (5)再接着分析函數聲明,函數名爲屬性名,值爲函數體,如果遇到同名的情況,直接覆蓋;

    注:函數執行一次,就會產生一次預編譯的過程,預編譯就是執行前的過程;

3.變量聲明和函數聲明:

var a = 123;     //變量聲明
function self(){}     //函數聲明

4.實例演示:

function test(){
    console.log(b); 
    if(a){
       var b = 100;  
    }
    console.log(b);  
    c = 234;   
    console.log(c);      
}
var a ;
test();
console.log(c); 

    開始分析:

//預編譯過程:
//1.頁面產生GO對象
//GO:{
   test : function  (形參爲屬性名,實參爲屬性值)
     a : undefined (變量名爲屬性名,變量值爲undefined) 
     c : undefined (因爲沒有值,所有事undefined)
      }
//2.函數運行前的一瞬間,再產生一個AO對象,編譯函數體內的內容
//AO:{
   b : undefined
   c : undefined
   test : function
     }
//預編譯結束,開始逐行執行
//第一個b沒有值,輸出undefined
//第二個b雖然附了值,但是走不到if判斷中,輸出undefined
//第三個c賦予了值,輸出234
//第四個c同樣輸出234,因爲c = 234是沒有聲明的變量,是全局變量,歸window對象所有

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章