我是从这两篇文章的阅读中,做出了自己的总结,如果不明白的话可以看看这两篇文章:
变量提升情况:
- var有变量提升,提升到当前作用域顶部并被初始化为undefined
- 函数整个都会被提升,所以可以在函数定义之前直接调用并能正常执行
- let、const有暂时性死区,所以提升了但是无效
变量提升概念:
- 只提升创建(也可以叫声明或注册),不提升赋值
- 提升时会让变量在作用域的顶层注册
js引擎在执行过程中变量的生命周期分为三个阶段:注册、初始化、赋值
var、funciton、let、const的生命周期:
var
在注册阶段初始化是一起的,会被赋值为undefined
,所以变量提升,打印出的是undefined
function
在注册阶段初始化、执行都一起了,所以函数不管写在哪里都可以直接调用
let
在注册阶段和初始化是解耦的,只是创建了但是并未初始化,所以出现了暂时性死区,打印出的是'x is not defined'
const
的生命周期与let一样,只不过没有赋值阶段