js運(yùn)行三部曲
- 語(yǔ)法分析
- 預(yù)編譯
- 解釋執(zhí)行
預(yù)編譯前奏
- imply global 暗示全局變量, 即任何變量, 如果為經(jīng)聲明就賦值, 此變量就為全局對(duì)象所有.
- 一切聲明的全局變量, 全是window的屬性.
例: var a = 123; --> window.a = 123;
預(yù)編譯
四部曲:
創(chuàng)建AO對(duì)象
找形參和變量聲明, 將變量和形參名作為AO屬性名, 值為undefined
將實(shí)參值和形參統(tǒng)一
-
在函數(shù)體里面找函數(shù)聲明, 值賦予函數(shù)體.
例:
以當(dāng)前函數(shù)為例子
創(chuàng)建AO對(duì)象為{
a: undefined
b: undefined
}
第三部將實(shí)參值和形參相統(tǒng)一
AO = {
a : 1,
b : undefined
}
第四部, 在函數(shù)體里找函數(shù)聲明, 值賦予函數(shù)體
Ao = {
a: function a( ){ },
b: undefined,
d: function d( ) { }
}
因此該例子打印出來(lái)的結(jié)果應(yīng)該為
總結(jié)
變量聲明提升,
函數(shù)聲明整體提升
相信你已經(jīng)掌握了方法, 因此我們?cè)賮?lái)一個(gè)例子來(lái)試試
function d ( ){ }創(chuàng)建AO對(duì)象, function d ( ){ }形參變量聲明
AO = {
a : undefined,
b : undefined,
c : undefined
}
第三部實(shí)參與形參相統(tǒng)一
AO = {
a : 1,
b : undefined,
c : undefined
}
第四部,在函數(shù)體里找函數(shù)聲明, 值賦予函數(shù)體
AO = {
a : 1,
b : function b ( ){ },
c : undefined,
d ; function d ( ){ }
}
最后開(kāi)始執(zhí)行, 先打印a為1, 借下來(lái)將c = 0, a = 3, b = 2, 打印b為2, 再打印b為2.
再來(lái)看一個(gè)例子
注意: 這里的a也是全局的