JS引擎的工作方式:先解析代碼,獲取所有變量的聲明。
- 變量提升
var a = 1;
var b = 2;
var c = 3;
等價(jià)于
var a;
var b;
var c;
a = 1;
b = 2;
c = 3;
所以
console.log(a);//undefined 不會(huì)報(bào)錯(cuò)
console.log(c);// c is not defined 報(bào)錯(cuò)
var a = 1;
var b = 2;
等加于:
var a;
var b;
console.log(a);//undefined 不會(huì)報(bào)錯(cuò)
console.log(c);// c is not defined 報(bào)錯(cuò)
a = 1;
b = 2;
- 函數(shù)聲明提升
- 當(dāng)函數(shù)通過函數(shù)聲明進(jìn)行定義時(shí),會(huì)有聲明提升
printNum();//有效,控制臺(tái)打印了1
function printNum(){
console.log('1');
}
- 但是,通過其他方式定義的函數(shù)沒有聲明提升
1.構(gòu)造函數(shù)
printNum();//報(bào)錯(cuò) printNum is not a function(...)
var printNum = new Function("console.log('1');");
2.函數(shù)表達(dá)式
printNum();//報(bào)錯(cuò) printNum is not a function(...)
var printNum = function(){
console.log(1);
};