JS引擎的工作方式:先解析代码,获取所有变量的声明。
- 变量提升
var a = 1;
var b = 2;
var c = 3;
等价于
var a;
var b;
var c;
a = 1;
b = 2;
c = 3;
所以
console.log(a);//undefined 不会报错
console.log(c);// c is not defined 报错
var a = 1;
var b = 2;
等加于:
var a;
var b;
console.log(a);//undefined 不会报错
console.log(c);// c is not defined 报错
a = 1;
b = 2;
- 函数声明提升
- 当函数通过函数声明进行定义时,会有声明提升
printNum();//有效,控制台打印了1
function printNum(){
console.log('1');
}
- 但是,通过其他方式定义的函数没有声明提升
1.构造函数
printNum();//报错 printNum is not a function(...)
var printNum = new Function("console.log('1');");
2.函数表达式
printNum();//报错 printNum is not a function(...)
var printNum = function(){
console.log(1);
};