javascript的执行顺序问题
javascript是一种弱类型,松散灵活的解释型语言,但是它的解释过程仍然遵循一定规范。
看看下面这个例子(来自AJAXBBS):
(先不要急着运行,先想想结果。)
JavaScript:
-
<script type="text/javascript">
-
<!--
-
var a="xx";
-
function c(){
-
alert(a);
-
var a=0;
-
alert(a);
-
}
-
c();
-
alert(a)
-
//-->
-
</script>
很多人都会认为输出的执行结果应该是这样:xx 0 xx。
因为函数内第一个a没有声明,应该默认为全局变量,所以输出xx;第二个a是函数的局部变量,输出0;第三个输出全局a的值xx。
然而实际上,输出结果却是 undefined 0 xx。
为什么不是xx却是undefined?
其实,这里面除了局部变量和全局变量的知识外,更容易被忽视的问题是javascript代码的执行顺序问题。
javascript总是先声明变量,再执行代码。事实上,上面的代码等价于:
JavaScript:
-
<script type="text/javascript">
-
<!--
-
var a="xx";
-
function c(){
-
var a;
-
alert(a);
-
a=0;
-
alert(a);
-
}
-
c();
-
alert(a)
-
-
//-->
-
</script>
因为第一个a没有赋值,所以结果自然是undefined。
看看这段代码或许会更明白:
JavaScript:
-
<script type="text/javascript">
-
<!--
-
var a="xx";
-
function c(){
-
a=12;
-
alert(a);
-
var a=0;
-
alert(a);
-
}
-
c();
-
alert(a)
-
-
//-->
-
</script>
我javascript 还处于入门阶段。。
先声明后执行,在函数内没有声明变量的会覆盖函数外面声明的的值吗?
会,如果没有声明,javascript将往上层作用域递归查找,直到找到同名变量或查找完毕为止。
那为什么最后一个alert(a) 会输出 xx 而不是undefined
最后一个a是全局变量,自然是其值xx。
函数内部的因为显式声明了变量a,所以函数内部的a全是局部变量。不管声明的先后位置。
因为函数具有一个作用域,在这个作用域内,总是有 先声明变量,后执行代码。
稍微有那么点点懂了….我在查查资料…
写的不错啊,可惜我看不懂啊!哇哈哈!