Skip to main content

变量提升

变量提升

具体表现:

采用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定义的变量初始值为undefinedundefined可被访问

  • let定义的变量初始值为unitializedunitialized被访问会被抛出错误,即( xxxx is not defined)