变量提升
变量提升
具体表现:
采用var
声明变量
function f(){
console.log(t) // undefined
var t = '123'
}
f()
采用let/const
声明变量
function f(){
console.log(t) // ReferenceError: t is not defined
let t = '123'
}
f()
变量在未声明之前,理应是不存在且无法被访问的,但是用var
声明的变量却打印出了undefined
,这是不合理的,
而采用let
或者const
的声明的变量则抛出了未定义的错误,这才是我们预期的结果,var这种情况就被称作变量提升
原因:
详细的原因网上资料很多,总结一下自己的理解:
变量提升其实质是一段代码在上下文创建阶段(编译阶段)编译器分别对所有被声明的变量赋予的初始值
var
定义的变量初始值为undefined
,undefined
可被访问let
定义的变量初始值为unitialized
,unitialized
被访问会被抛出错误,即( xxxx is not defined)