猿问

js作用域问题

var a=1;
    function b(){
        a =10;
        return ;
       //function a(){}
    }
    b();
    alert(a);

以上alert 10

去掉注释

    var a=1;
    function b(){
        a =10;
        return ;
       function a(){}
    }
    b();
    alert(a);

就alert 1    为什么呢?

xiaoxiaomingming
浏览 1130回答 1
1回答

holy_night

经过chrome调试下发现代码运行原理应该是这样当执行b()时进入函数b的作用域,然后当执行代码“a=10;”之前a就已经是function了,然后执行a=10;只不过是把function a 赋值为10;跟外部a一点关系都没有,所以实际代码简化如下:          var a=1;    function b(){        function a(){}        a =10;        return ;    }    b();    alert(a); 要注意函数声明是提前读取的不是走到最后才声明出函数a!
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答