请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

全局作用域和函数作用域问题

关于作用域的问题。 js中只有2个作用域:函数作用域和全局作用域。
我的理解:

  1. 情况1
    执行前把a的声明拿到全局作用域中赋值undefined。所以console.log(a)就是undefined
  2. 情况2
    同1.
  3. 情况3
    先扫描一遍整个html文件,a的声明拿出来,然后执行,赋值‘nanannaa’,所以console.log(a)就是nanannaa。

然而情况1和情况2的结果并不相同。 情况1是报错,而情况2为undefined。

  </body>
  // 情况1
  <script type="text/javascript">
    console.log(a);
  </script>
  <script>
    var a ="nanannaa"
  </script>

// 情况2
  <script>
    console.log(a);
    var a ="nanannaa"
  </script>

//情况3
  <script>
    var a ="nanannaa"
  </script>
  <script type="text/javascript">
    console.log(a);
  </script>

</html>

正在回答

1回答

“情况1:执行前把a的声明拿到全局作用域中赋值undefined。所以console.log(a)就是undefined”—— 这是错误的。

看你代码,情况1 拿到第一个 script 并解析执行的时候 ,a 在已知代码中没有定义。而情况2 拿到第一个 script 解析并执行的时候,a 已经在已知代码中定义了。

1 回复 有任何疑惑可以回复我~
  • 提问者 啦啦儿 #1
    谢谢老师,辛苦啦
    回复 有任何疑惑可以回复我~ 2019-02-18 22:43:02
  • 提问者 啦啦儿 #2
    因为js是按块执行的,所以情况1执行时没有定义。
    虽然js按块执行,但所有的块都只有一个全局作用域。
    回复 有任何疑惑可以回复我~ 2019-02-18 22:44:53
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信