抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

变量提升

先说三句总结性的话:

  • let 的「创建」过程被提升了,但是初始化没有提升。

  • var 的「创建」和「初始化」都被提升了。

  • function 的「创建」「初始化」和「赋值」都被提升了。

变量提升的规律

在进入一个执行上下文后,先把 var 和 function 声明的变量前置,再去顺序执行代码。

PS:作用域分为全局作用域和函数作用域,用var声明的变量,只在自己所在的所用域有效。

我们举例来看看下面的代码。

代码 1:

1
2
3
4
5
6
7
console.log(fn);
var fn = 1;

function fn() {
}

console.log(fn);

相当于:

1
2
3
4
5
6
7
8
var fn = undefined;

function fn() {
}

console.log(fn);
fn = 1;
console.log(fn);

打印结果:

代码 2:

1
2
3
4
console.log(i);
for (var i = 0; i < 3; i++) {
console.log(i)
}

相当于:

1
2
3
4
5
6
var i = undefined;

console.log(i);
for (i = 0; i < 3; i++) {
console.log(i);
}

打印结果:

代码 3:

1
2
3
4
5
6
7
8
9
10
11
var a = 1;

function fn() {
a = 2;
console.log(a)
var a = 3;
console.log(a)
}

fn();
console.log(a);