JavaScript中的变量提升
首先,我们先来理解什么叫做变量提升?
浏览器中的解析器会先解析我们的JavaScript代码,然后把声明的变量的声明提升到最前,这就叫做变量提升
大家请看下面的代码:
console.log(str);
var str = "hello world";
console.log(str);
上面这段代码的执行结果为什么会是这样呢?请看解析后的代码:
var str;
console.log(str);
str = "hello world";
console.log(str);
解析器将var声明的变量提升到了最开始,只声明了,没有赋值,执行第一个log,打印出了undefined,而第二个log之前,对str进行了一个赋值,所以第二个log打印了hello world;
变量提升也会在方法中存在变量提升,请看代码:
function fun(){
console.log(str);
var str = "hello world";
console.log(str);
}
同样的理解为,解析器将声明提升到了方法内的第一句,只声明了没赋值。
function fun(){
var str;
console.log(str);
str = "hello world";
console.log(str);
}
那么这个解析过程也可以这样去理解。 最后提醒,使用 var 定义的代码,声明会被提升到前面,赋值还在原位置。
在以后的声明中,尽量使用es6中的let和const声明方式去代替var声明。
|