date1103变量提升

72 阅读1分钟

1.在浏览器读JS代码的时候有一个预解析,此时会有一个变量提升。

2.什么是变量提升

第一种情况
在预解析时, 将 JS 内部的 变量 全部提升到 当前作用域顶端(当前代码的最上边);

变量提升的时候, 值不会到最顶端, 可以理解为, 把声明变量提升到最顶端, 但是没赋值。
a = 2;
var a;
console.log(a);

运行结果:2

假设这段代码从上到下执行,肯定输出undefined,然而JavaScript却不是自上而下执行的语言。这个主要是有变量提升,他回将当前作用域的所有变量的声明,提升到程序的顶部,因此,上面的代码等价于以下代码。

var a;
a = 2;
console.log(a);

运行结果:2

第二种情况
console.log(a);
var a = 2;

运行结果:undefined

JavaScript会将变量的声明提升到顶部,但是赋值语句是不会有变量提升的。对于var a = 2是分为两步解析的:

var a;
a = 2;

而js只会提升var a这句,所以刚刚那么等于:

var a;
console.log(a);
a = 2;
第三种情况
fn();
function fn(){
    console.log('fn');
}
var fn = 2;

运行结果:fn

fn();
function fn(){
    console.log('fn1');
}
function fn(){
    console.log('fn2');
}

运行结果:fn2

fn();
var fn = function(){
    console.log('fn');
} 

运行结果:报错