一、变量提升
1.什么是变量提升?
变量提升是JavaScript中的一种行为,它允许在变量声明之前就可以访问和使用变量。
在JavaScript中,变量提升是指在代码执行之前,JavaScript引擎会将变量的声明部分提升到作用域的顶部,但变量的赋值操作仍然会保留在原来的位置。
变量提升只会提升声明,不会提升赋值。
2.变量提升的两种情况:
1. 变量声明提升
- 只有var声明的变量才会有变量提升
- 提升只会在当前作用域的最前面
- 只提升声明,不提升赋值 ==>var a; // undefined
- 代码示例
console.log(a) // undefined
var a = 1
上面代码变量声明提升后相当于下面的代码:
var a
console.log(a)
a = 1
2. 函数声明提升
- 在调用函数时,函数的声明(function)会在当前作用域提升到顶部
- 只提升声明,不提升赋值
- 代码示例
fn() // 函数提升了
function fn() {
console.log('函数提升了')
}
上面代码函数声明提升后相当于下面的代码:
function fn() {
console.log('函数提升了')
}
fn() // 函数提升了
function fn() {
console.log('函数提升了')
}
注意:函数表达式不存在函数声明提升
// 不存在提升的现象
b() // 02函数提升 TypeError: b is not a function 翻译为:b不是一个方法
var b = function () {
console.log('函数表示式是赋值,不会有函数提升')
}
上面代码相当于下面的代码:
// 不存在提升的现象
var b
b() // 02函数提升 TypeError: b is not a function 翻译为:b不是一个方法
var b = function () {
console.log('函数表示式是赋值,不会有函数提升')
}
注意:函数声明提升高于变量声明提升
var num = 123
num() // num
function num() {
console.log('num')
}
function num() {
console.log('num')
}
var num
num()
num = 123