变量提升,也可以说成是变量声明提升,是指在Javascript中变量的声明会被提到作用域的顶部,而变量的赋值留在原地,具体我们可以看看下面这个问题:
Q : 下面的这段代码执行结果是什么?
var a = 1;
function test(){
console.log(a);
var a = 2;
}
test();
如果你至今还不知道什么是变量提升,你可能会认为在函数test外部已经声明并赋值了a=1,
那么函数内部第一行的log结果应该就是 1 。那我们把代码复制进浏览器看看结果吧:
输出结果为 undefined
其实,按照本文上面对变量提升的说明,也就不难理解了,实际代码运行的顺序应当是这样的:
var a = 1;
function test(){
var a; //声明被提前
console.log(a);
a = 2; //赋值留在原地
}
test();
值得一提的是:如果把变量声明的关键字 var 换成 let ,则会出现一个如下的错误:
VM515:3 Uncaught ReferenceError: a is not defined
你理解了吗?
在这里提出另一点思考,如果我把代码稍作修改:
var a = 1;
function test(){
console.log(a);
a = 2;
}
test();
结果会是怎样呢?
如果有正在学web前端的小伙伴,可来我们的学习扣qun哦:86772,6593里面免费送视频教程。小编也是一名从事了5年web前端开发的工程师,花了近一个月整理了一份较适合18年学习的干货,以及我这五年的工作经验,分享给每一位想学web前端的小伙伴,这里是web前端学习者聚集地,欢迎初学和进阶中的小伙伴。
网友评论