两个 script 标签

作者:vkvi 来源:ITPOW(原创) 日期:2008-9-9

示例一

<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 标签的代码执行也停止下来,
相关文章