鍍金池/ 問答/Java  C++  HTML/ js作用域問題求解答???

js作用域問題求解答???

    var a= 1;
    function fn1(){
        alert(a);
        a = 2;
    }
    fn1();
    alert(a);

結(jié)果 先輸出1,之后輸出2

想請問一下瀏覽器執(zhí)行這個(gè)的過程,求懂得人指教

回答
編輯回答
孤慣

var a = 1就是講a定義為全局變量,你fn1()執(zhí)行的時(shí)候,fn1函數(shù)內(nèi)部,alert(a)前面并沒有定義a,就會在全局作用域中尋找a,所以第一次是alert(1),然后你的a被改為2(第二次的a也是全局的),最下面的那個(gè)alert(a)中的a就為2

2018年4月9日 14:44
編輯回答
無標(biāo)題

你的代碼等價(jià)于

var a;
function fn1(){
    alert(a);
    a = 2;
}
a = 1;
fn1();
alert(a);

function fn1 提升了,然后是a賦值,第一個(gè)1,是fn1里面打印的,打印之后a等于2了,下面再打印就是2了。

2017年8月25日 05:49
編輯回答
離人歸

執(zhí)行fn1()內(nèi)部的alert(a)時(shí),fn1內(nèi)部沒有變量a,就會去全局作用域中尋找,此時(shí)a為1;然后a被賦值為2,所以后面的alert(a)為2

2017年11月1日 10:31
編輯回答
櫻花霓

執(zhí)行順序已經(jīng)有人回答了,所以不再重復(fù)了。

其實(shí)你想了解執(zhí)行順序,可以打斷點(diǎn)看下,更加方便和清楚。

2018年8月2日 18:59