为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

幻灭丶 2016-06-24 23:47:10
(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>
查看完整描述

2 回答

?
幻灭丶

TA贡献42条经验 获得超8个赞

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

查看完整回答
反对 回复 2016-06-25
?
柠檬酸钠

TA贡献331条经验 获得超534个赞

函数内因为有var scope = 'local',所以在外面的申明无效,所以就成undefined了,我也是今天刚知道的http://www.imooc.com/wenda/detail/320994

把var去掉就正常了

查看完整回答
反对 回复 2016-06-25
  • 2 回答
  • 0 关注
  • 1628 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信