猿问

js作用域问题求解答???

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

结果 先输出1,之后输出2

想请问一下浏览器执行这个的过程,求懂得人指教


慕容708150
浏览 357回答 3
3回答

炎炎设计

执行fn1()内部的alert(a)时,fn1内部没有变量a,就会去全局作用域中寻找,此时a为1;然后a被赋值为2,所以后面的alert(a)为2

跃然一笑

var a = 1就是讲a定义为全局变量,你fn1()执行的时候,fn1函数内部,alert(a)前面并没有定义a,就会在全局作用域中寻找a,所以第一次是alert(1),然后你的a被改为2(第二次的a也是全局的),最下面的那个alert(a)中的a就为2

潇潇雨雨

执行顺序已经有人回答了,所以不再重复了。其实你想了解执行顺序,可以打断点看下,更加方便和清楚。
随时随地看视频慕课网APP
我要回答