什么是变量提升?
简单来说,就是JavaScript在执行程序时,会先把变量声明这一操作提前。换句话来说,就是不会在程序执行过程中声明变量。例子:
function fn(){
console.log(name);
var name = "RoastDuck";
fn();
}
执行结果:
![](/i/l/?n=23&i=blog/3087276/202302/3087276-20230206152819482-180510615.png)
对于先使用后声明这种操作,凭借直觉,程序一定是错的。但是但是但是,控制台没有报错,只是说undedined,这就说明,变量已经声明,只不过是没有赋值。值得注意的是,变量提升只是把声明提前,并不会给变量赋值。也就是说,在变量提升的前提下,var name = "RoastDuck"
和var name
没有区别.
程序不听使唤,难以接受。
但是但是但是,变量提升的问题在ES6版本中得到了解决。
我们可以使用let或const声明变量,把变量限制在作用域内。
例子:
function fn(){
console.log(name);
let name = "RoastDuck";
}
fn();
执行结果:
![](/i/l/?n=23&i=blog/3087276/202302/3087276-20230206155840010-763153808.png)