2019-01-20
回答
提升是 JavaScript 的一种机制,在编译阶段任意位置的变量和函数声明都会被放入内存中。也就是说不论函数和变量在何处被声明,他们的作用域是全局的还是局部的,他们的声明都会移动到作用域的顶部。
这里需要注意的是,他们的初始化并不会被提升。因此如下等同的两段代码片断都将输出 undefined
console.log(hoist) // undefined
var hoist = "value"
var hoist
console.log(hoist) // undefined
hoist = "value"
同理,提升也允许你在函数声明之前调用他:
myFunction() // hello
function myFunction() {
console.log("hello")
}
但是函数表达式就不允许这样:
myFunction() // Uncaught TypeError: myFunction is not a function
var myFunction = function() {
console.log("hello")
}
加分回答
- 提升是 JavaScript 中将声明移到作用域顶部的默认行为
- 函数声明在变量声明之前被提升
- 变量提升