6 回答

夢里花落0921
TA貢獻1772條經驗 獲得超6個贊
這里有兩個坑:
一、在變量提升過程中有這樣的順序,函數形參 > 函數 > 變量,另外,賦值操作會覆蓋聲明過程。
針對這題相當于:
function a(){}
var a;
a = 0;// 這里的賦值操作會覆蓋前面聲明的function a,
....
二、js 引擎編譯過程的差異
代碼:
console.log(a);
var a = 0;
console.log(a);
if (a++) {
function a() {console.log('function a')};
}
console.log(a());
chrome v8會在編譯對不執行代碼(dead code)(這里時條件為false)進行優化,我的理解是這里function a(){} 這段被去除。所以這里function a 在執行時就不存在提升了。
undefined
0
// 報錯
IE Chakra(我在IE11進行了測試) 會把function a(){} 編譯進去,就是和我們預期的函數、變量提升相同。
function a() {console.log('function a')};
0
// 報錯
添加回答
舉報
0/150
提交
取消