標籤:請求 9.png 語言 先行編譯 結果 形參 技術 就會 簡單的
javascript是一種解釋性弱類型語言,在瀏覽器中執行時,瀏覽器會先預覽某段代碼進行文法分析,檢查文法的正確與否,然後再進行先行編譯,到最後才會從上往下一句一句開始執行這段代碼,簡單得來說可以表示為三個步驟: 文法分析-->先行編譯-->解釋執行;
先插入一段代碼:
在理解先行編譯之前,我們需要首先理解函式宣告和變數賦值:先來一行代碼解釋什麼是函式宣告,
相信有一些javascript基礎的人都應該很容易理解這行代碼,這隻是簡單的聲明了一個常見函數,而變數賦值如下:
在項目開發過程中,我們經常會定義一些變數來接受傳遞過來的資料,例如在發送Ajax請求時,後台會返回給我們一些資料,我們就會定義一些變數或數組來接受資料,然後再綁定資料到Dom元素上;
在理解了什麼是函式宣告和變數賦值之後,接下來我們開始解釋先行編譯的過程,
瀏覽器在執行script代碼塊之前,會先進行先行編譯,先行編譯一般會分為以下四個步驟:
1.建立AO(Activation Object:執行期上下文)對象;
2.找出形參和變數聲明,將變數和形參名作為AO屬性名稱,值為undefined;
3.將實參值和形參統一;
4.在函數體內找出函式宣告,值賦給函數體;
最後,瀏覽器會開始解釋一行代碼執行一行代碼,如果變數在代碼塊裡被重新賦值,那它最終的值就為代碼塊重新賦給它的值,例如上面例子中,第一個console.log(a)的值為function a(){},到了下一步變數a被重新賦值,var a = 123;所以在第二個第三個console.log(a)中,a的輸出值為123,然後函數執行到var b = function (){},下面開始執行console.log(b),所以b的值為function (){};
最後,在理解了先行編譯之後,我們自然可以得出這道例題的結果:
對於先行編譯的理解,我們需要多做一些例題來加深印象,正所謂熟能生巧!
JavaScript之先行編譯