谈js的变量声明和函数声明提升

首先我们需要知道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。

结论:函数声明可以提升,函数表达式的声明不能提升。

猜你喜欢

转载自blog.csdn.net/sunny123x/article/details/81175066