日期:2014-05-16 浏览次数:20361 次
看看下面代码的执行结果:
?
<script> alert(a); a = "hello"; alert(b); var b = "hello"; </script>
?答案如下:
?
让我们来分析一下。
1、首先从alert(b)开始分析。本着JavaScript“先定义,后赋值”的原则,代码片段(1)
?
alert(b); var b = "hello";
?在编译的时候,其实是按照下面的方式进行编译的:
?
var b; alert(b); b = "hello";
?JavaScript在编译的时候,凡是遇到var关键字的,都会在变量所处作用域内的最顶端先声明这个变量。这样,就很好理解为什么alert(b)的时候是undefined了。
?
2、接着在分析alert(a)。大家都知道,在JavaScript中,如果直接给一个从未声明过的变量赋值,那么,这个变量就会默认为是全局变量。既然是全局变量,为什么alert(a)的时候,会有错误?应该和alert(b)一样,打印出undefined啊?其实不然。因为 a = “hello”,前面没有var关键字,所以,在编译的时候,js编译器不认为这条语句有什么特殊性,就是一条普通的语句。说到这里,大家会明白,只有执行到 a = "hello"这一行时,js才会声明一个变量a,并给变量a赋值,在这之前,根本就没有a这个变量,先前的alert(a)肯定会报错的。
?
?