(一)总体概括:
在实际的代码编写中,你或许对这些内容没有认识,因为缺乏这些知识并不会对你日常编写代码造成很大的困扰:为什么函数在未被构建前就调用代码还可以正常执行?为什么变量明明声明了但却显示undefined?怀着对知识的敬佩和拓展,在简单学习了这方面的知识后,我觉得比较重要,这涉及了代码底层的一些逻辑。鄙人短见,如有错误望指正。
(二)变量提升
(1)先行条件
(1)只在var声明时提升,let和const不会提升
(2)提升的只能是声明,不是赋值
(3)只在当前作用域内提升
(2)相关实例
在ES6之前,let和const未问鼎的时候,绝大部分变量声明都是使用var关键字,下面介绍常见的变量提升的问题:
console.log(a);
var a = 10;
代码的运行结果是undefined,是不是没想到。其中所谓的变量提升,其实就是指在JavaScript解析时,会先找到代码中的所有变量声明,然后将其放到其作用域的头部,但请注意!变量提升只提升其中的变量声明,不提升其赋值操作。上方的例子相当于:
var a;
console.log(a); //undefined
a = 10;
再来一个例子:
var a = 10
function fn(){
console.log(b);
var b = 10;
}
console.log(a)
转化为:
var a = 10
function fn(){
var b
console.log(b);
b = 10;
}
console.log(a)
现在理解为什么是undefined了吧!如果还有疑惑,请在评论区留言。