全局作用域和函数作用域问题
来源:16-2 作用域和闭包-执行上下文-代码演示
啦啦儿
2019-02-18
关于作用域的问题。 js中只有2个作用域:函数作用域和全局作用域。
我的理解:
- 情况1
执行前把a的声明拿到全局作用域中赋值undefined。所以console.log(a)就是undefined - 情况2
同1. - 情况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 已经在已知代码中定义了。
122019-02-18
相似问题