6 回答

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超3個(gè)贊

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超6個(gè)贊
這里有兩個(gè)坑:
一、在變量提升過(guò)程中有這樣的順序,函數(shù)形參 > 函數(shù) > 變量,另外,賦值操作會(huì)覆蓋聲明過(guò)程。
針對(duì)這題相當(dāng)于:
function a(){}
var a;
a = 0;// 這里的賦值操作會(huì)覆蓋前面聲明的function a,
....
二、js 引擎編譯過(guò)程的差異
代碼:
console.log(a);
var a = 0;
console.log(a);
if (a++) {
function a() {console.log('function a')};
}
console.log(a());
chrome v8會(huì)在編譯對(duì)不執(zhí)行代碼(dead code)(這里時(shí)條件為false)進(jìn)行優(yōu)化,我的理解是這里function a(){} 這段被去除。所以這里function a 在執(zhí)行時(shí)就不存在提升了。
undefined
0
// 報(bào)錯(cuò)
IE Chakra(我在IE11進(jìn)行了測(cè)試) 會(huì)把function a(){} 編譯進(jìn)去,就是和我們預(yù)期的函數(shù)、變量提升相同。
function a() {console.log('function a')};
0
// 報(bào)錯(cuò)
添加回答
舉報(bào)