关于变量提升这个玩意,你说简单吧,很多人做好几年前端了,仍然会晕掉,例如说我。

前几天笔试遇到一个变量提升的问题,答案是写出来了,然后面试官让我讲,我就讲不出来了。

今天分享一篇看到别人的总结,加上一点自己的理解。希望能有所帮助,自己也能记住。


1.关于声明变量的过程:

var a = 1;
var b = 2;

    其实他的执行过程是这样的:

var a;
var b;
a = 1;
b = 2;

    先声明变量,后执行赋值。


2.变量提升

function test(){
    a=2;    
    var a;
    console.log(a); 
}
test()//2

   执行过程:

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

    再看一个例子

var a = 2;
function test(){
    console.log(a);
    var a = 1; 
}
test()//undefined;

    有木有人有点晕的,哈哈,其实看看执行过程就懂了:

var a = 2;
function test(){
    var a;
    console.log(a);
    a = 1; 
}
test()//undefined;

这个就是变量声明的提升,以及执行顺序。

函数内部的声明变量被提升到了第一句就执行。赋值语句仍然在原来的位置。


3.函数声明,这里必须知道一点:函数声明提升,优先级高于变量声明提升。

console.log(foo);    
var foo =2;
function foo(){
  
}

    执行过程:

function foo(){
};
var foo;//函数声明也是声明变量的方式,该声明为重复声明,并不执行;
console.log(foo);
foo=2;


最后分享一道经典笔试题

var a = 2;
function b(a){
    console.log(a);
    var a = 1;
    function a(){}
    console.log(a);
}
b(a);

不会的敲到控制台,看看自己想的对不对。