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...