鍍金池/ 問答/HTML/ 關(guān)于js中 var 的變量提升問題

關(guān)于js中 var 的變量提升問題

變量提升

    var a="show";
    function hah(){
        alert(a);//undefined
        var a=4;
        alert(a);//4
    }
    hah();

這個我可以理解

function hah(number){
        var a="show";
        while(number!=0){
            alert(a);//show
            var a=4;
            alert(a);//4
            number--;
        }
    }
   hah(1);   

為什么這里的a 彈出的是show

回答
編輯回答
妖妖

var a="show"; 在方法里面啊

2018年7月12日 14:14
編輯回答
冷眸

變量提升是樓主造出來的詞?

2017年4月26日 18:08
編輯回答
有點壞

因為在ES6之前,JavaScript沒有塊級作用域,只有全局作用域和函數(shù)作用域。
變量提升的本質(zhì)是將變量聲明提升到它所在作用域的最開始的部分。
瀏覽器環(huán)境 window 是全局作用域,函數(shù) function 包裹的是函數(shù)作用域。
while 不是函數(shù),它沒有作用域。所以,在條件為 true 的時候相當于:

function hah(number){
        var a="show";
        alert(a);//show
        var a=4;
        alert(a);//4
        number--;
    }
 hah(1);  
   

再進一步分解,就是:

function hah(number){
    var a;
    var a;
    a = "show";
    alert(a);//show
    a=4;
    alert(a);//4
    number--;
}
hah(1);  
2018年2月26日 07:43
編輯回答
熊出沒

等價于

function hah(number){
        var a="show";
        var a;
        while(number!=0){
            alert(a);//show
            a=4;
            alert(a);//4
            number--;
        }
}
hah(1); 
2017年8月29日 04:38
編輯回答
萌二代

通俗的給你解釋一下?。?/p>

js執(zhí)行順序一般認為從上而下 但是函數(shù)聲明權(quán)重高 提升 var聲明提升 可以理解為
函數(shù) > var >自上到下
(并不是完整的就是這樣 只是通俗給你解釋上面這套題寫的表達式, 但是這個成立)

然后捋一下  先函數(shù)聲明  聲明hah  然后var 聲明 此時為未定義   然后hah(1)調(diào)用函數(shù),調(diào)用
的時候進行一系列 賦值 操作 自上從下擼代碼就可以了   至于參數(shù)這個number以及下面的判斷
都是迷惑你的, 別被迷惑,去掉也是show  4這樣的結(jié)果
2017年1月30日 06:37