作用域的3个问题求解答困扰好久了

(1)    var i=0;这个i如果在if 或者在for里相当于什么还是局部变量?如果在函数test里在创建一个函数这个i是否可以调用?

简单的说就是比如创建funcition text(0) 定义局部变量var i=0.只要在test函数中不管其中包含多少函数,这个i都会有效是吧?在子函数里直接调用就可以是吧?那么第二个问题如果在test的子函数中声明一个变量,这个变量是否依然可以在其他子函数中使用呢?

<html>  
<head>  
<script type="text/javascript">  
    function test(o) {  
        var i = 0;  
        if (typeof o == "object") {  
            var j = 0;  
            for (var k = 0; k < 10; k++)   
            {  
                document.write(k);  
            }  
            document.write(k);  //还可以访问到k为10  
        }  
        document.write(j); //还可以访问到j为0  
    }  
    var o = new Object();  
    test(o);  
</script>  
</head>  
</html>

(2)   为什么第一个alert(scope)显示undefined,不是外面有全局函数了吗?


<html>  
<head>  
<script type="text/javascript">  
   var scope = "global";  
   function f() {  
       alert(scope);  //显示undefined  
       var scope = "local";  
       alert(scope);  
   }  
   f();  
</script>  
</head>  
</html>

(3)没错我就是(2).我又来了JS有hoisting这个东西也就是变量声明提升。var scope=local应该挤到第一个位置来,那么

就意味着先声明后执行。为什么在这里会无效呢?

<html>  
<head>  
<script type="text/javascript">  
   var scope = "global";  
   function f() {  
       alert(scope);  //显示undefined  
       var scope = "local";  
       alert(scope);  
   }  
   f();  
</script>  
</head>  
</html>


幻灭丶
浏览 1691回答 2
2回答

幻灭丶

查了一晚上资料自己解决了,有时间写个作用域的手记吧

柠檬酸钠

函数内因为有var scope = 'local',所以在外面的申明无效,所以就成undefined了,我也是今天刚知道的http://www.imooc.com/wenda/detail/320994 把var去掉就正常了
打开App,查看更多内容
随时随地看视频慕课网APP