js中的預編譯

2021-10-01 15:12:47 字數 1190 閱讀 8647

js執行順序: 詞法/語法分析 預編譯 解釋執行

js中存在預編譯

function demo() 

demo(); //i am demo

test(); // i am test

//分析: 由於存在預編譯,test函式可以執行

function test()

var a;

console.log(a) //undefined

a = '123'

預編譯發生在**執行的前一刻

預編譯的步驟:

1,建立執行期上下文 activation object,即ao

2,找形參和變數宣告,將形參和變數宣告做為ao的屬性名,尚未賦值,值為undefined

3,將形參和實參相統一, 即把實參的值傳到形參裡面去

4,在函式體裡面找函式宣告,賦值函式體

例項

function demo(a, b)

function e()

}demo(1)

// 1.建立ao物件{}

// 2.找形參和變數宣告

ao =

//3. 形參實參想統一

ao =

// 4.在函式體裡面找函式宣告,值賦函式體

ao = ,

e: function e()

} // 5.解釋執行

預編譯(指令碼**塊script執行前)

1,生成go

2. 查詢全域性變數宣告(包括隱式全域性變數宣告,省略var宣告),變數名作全域性物件的屬性,值為undefined

3. 查詢函式宣告,函式名作為全域性物件的屬性,值為函式引用

**:

//go 

//}global = 100;

function fn()

fn();

var global;

//ao

預編譯要點

首先預編譯導致的基於兩點

1.變數的宣告提公升

首先var a = 123;,這個叫做變數宣告和變數賦值,系統首先會把變數宣告var a;提公升到最前面。

2.函式宣告整體提公升

就是說宣告乙個函式,不管在它上面呼叫函式還是在下面呼叫函式,都可以,因為系統總是會把函式提到邏輯的最前面,這樣不管在**呼叫這個函式在本質上都是在它下面呼叫。

js的預編譯

預編譯發生在函式執行前一刻 預編譯執行的步驟 1建立執行期上下文,activation object 即ao 2找形參和變數宣告,將形參和變數宣告做為ao的屬性名,尚未賦值,值為 undefined 3將形參和實參相統一,即把實參的值傳到形參裡面去 4在函式體裡面找函式宣告,賦值函式體 functi...

js的預編譯

函式執行前函式究竟做了什麼?一。函式執行前,首先會通篇檢查有沒有語法或者 寫錯的,如果有就直接報錯,如果沒有就會進行下一步 二。函式的預編譯階段 1.首先會在函式內生成乙個ao物件,2.變數或者形參作為函式的屬性名或者鍵名屬性值是undefined 3.實參給形參 4.函式宣告作為屬性值,屬性名為f...

js的預編譯

1.語法分析 通篇掃瞄看有沒有語法錯誤 2.預編譯 3.解釋執行 預編譯有兩種情況 一種是全域性的預編譯 一種是函式的預編譯 函式的預編譯 預編譯 函式執行的前一刻 下面 再預編譯的過程中發生了什麼變化呢 function demo num var num 13 console.log num 13...