示例一
<script type="text/javascript">
<!--
alert(a);
alert(b);
var a = "123";
-->
</script>
<script type="text/javascript">
<!--
var b = "456";
-->
</script>
如上,我们将代码写在两个 script 标签中。
- 在执行 alert(a); 时会显示对话框,内容为 undefined。
- 在执行 alert(b); 时会出现错误。
- 这是因为代码分为定义和执行,定义是把所有代码过一遍,遇到函数、变量就声明它们,但并不赋值。
- 定义完后就开始执行,什么时候算定义完,什么时候算开始执行呢?遇到 </script> 的时候。
所以在执行 alert(a); 时,a 已经定义了,但未赋值,故是 undefined,而 b 的定义在下一个 script 标签中,还没有执行到下一个标签,故出现 “'b' 未定义”的错误。
示例二
<script type="text/javascript">
<!--
alert(a);
alert(b);
var a = "123";
-->
</script>
<script type="text/javascript">
<!--
var b = "456";
alert(a);
alert(b);
-->
</script>
第二个标签中,增加了 alert(a);,那么这里 a 是什么值呢?仍是 undefined,这是由于前面 alert(b) 已经出现了错误,导致没有继续往下执行,也就没有为 a 赋值,所以第二个标签中 a 仍是 undefined。
第二个标签中,alert(b); 中 b 的值为 456。
示例三
<script type="text/javascript">
<!--
alert(f);
alert(f());
function f()
{
return "fff";
}
-->
</script>
显示内容分别是整个函数体内容和 "fff",
总结
- javascript 代码分“定义”和“执行”;“定义”在前,“执行”在后;“定义”是把所有代码过一遍;赋值属于“执行”,而不是“定义”。
- “定义”的时候,遇到 </script> 标签即完成“定义”,开始进行“执行”。
- 一个 script 标签中遇到代码错误可能会停止执行该 script 标签中的其它代码,但不会使其它 script 标签的代码执行也停止下来,