Translate Into English Coffee & Tea
ASP.NET 中的 AJAX ASP.NET 画图全接触 ASP.NET 与 XML 声明式数据绑定 ASP.NET 网页抓取
C# 基础 C# 类教程 C# 加密 ASP.NET 成员资格 非“自动化”处理 Excel
QuickAjax Ajax 完美的语法高亮器 Silverlight Popfly
通栏广告
两个 script 标签

示例一

<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 标签的代码执行也停止下来,
文章评论
标题:必填
内容:
文章信息