声明提升
2021-06-08 22:05:34 小于 1 分钟
简单来说就是,在var声明的变量之前使用这个变量不会导致报错,而是会打印undefined
# 声明提前;
函数内所有使用var声明的变量在函数体内可见。意味着变量在声明之前已经可用,这个特性就叫声明提前,即函数中的所有变量及函数声明都会提升至函数体的顶部。
# 例:变量声明提前;
var x = 5;
function f() {
// undefined 声明提前,但赋值不会
console.log(x);
var x = 10;
}
// 实际执行情况;
var x = 5;
function f() {
var x;
console.log(x);
x = 10;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 例:函数声明提前;
function f() {
// 可以调用成功
x();
function x() {
console.log(1);
}
}
f();
// 注意;函数表达式不会提前
function f() {
// 报错
x();
var x = function x() {
console.log(1);
}
}
f();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 优先级;
函数声明提前高于变量声明提前;
var double = 22;
function double(num) {
return (num * 2);
}
console.log(typeof double); // 'number'
// 实际
var double;
function double(num) {
return (num * 2);
}
double = 22
console.log(typeof double); // 'number'
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13