ES 基础 —— 声明提升
published
概念
声明提升(Declaration Hoisting)指「变量声明和函数声明会提升到其作用域的顶部的行为」。
ECMAScript 中会被提升的声明有:
-
变量声明(VariableDeclaration):
-
var
变量声明 -
let
变量声明(由于 TDZ,声明提升不会造成影响) -
const
变量声明(由于 TDZ,声明提升不会造成影响)
-
-
函数声明(Function Declaration):
-
function
函数声明
-
原理
声明提升与执行上下文中的 VO 相关。
例 1
console.log(typeof foo)
console.log(foo())
console.log(typeof bar)
var foo = 'hello'
var bar = function() {
return 'world'
}
function foo() {
return 'hello'
}
// 输出:
// function
// hello
// undefined
声明提升顺序:
-
var foo
-
var bar
-
function foo()
覆盖了最初的var foo
例 2
var a = 2
foo() // works because `foo()` declaration is "hoisted"
function foo() {
a = 3
console.log(a) // 3
var a // declaration is "hoisted" to the top of `foo()`
}
console.log(a) // 2
// 输出:
// 3
// 2
声明提升顺序:
-
最外层的
var a
-
function foo()
-
调用
foo()
时,foo
内部的var a