首先我们需要知道JS解析的两个阶段:预处理、执行期,本次来谈谈预处理阶段。
预处理阶段:JS会对代码中所有用var声明的变量和函数声明进行处理,将其提前。
注:其中变量也只是进行了声明并未进行初始化以及赋值。
变量:
来个简单的例子:
console.log(a);
var a = 1;
!!会显示undefined。
实际上,浏览器的解析过程如下:
var a;
console.log(a);
a = 1;
变量声明提前了,但赋值语句并未改变位置,这就叫变量的提升。
函数:
JS中的函数定义分为两种:函数声明与函数表达式
扫描二维码关注公众号,回复:
4073980 查看本文章
来个例子:
fn();
var fn = function aa() { //函数表达式
console.log(a);
var a = 1;
}
!!会直接报错。
再来一个对比一下:
fn();
function fn () {//函数声明
console.log(1);
}
!!结果为1。
结论:函数声明可以提升,函数表达式的声明不能提升。