JS變量提升相關總結

關於變量提升這個玩意,你說簡單吧,很多人做好幾年前端了,仍然會暈掉,例如說我。

前幾天筆試遇到一個變量提升的問題,答案是寫出來了,然後面試官讓我講,我就講不出來了。

今天分享一篇看到別人的總結,加上一點自己的理解。希望能有所幫助,自己也能記住。


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);

不會的敲到控制檯,看看自己想的對不對。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章