两个 script 标签

作者:vkvi 来源:千一网络(原创) 日期: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 标签的代码执行也停止下来,

你前面那位网友看了:HttpModule、HttpHandler-“一般处理程序(.ashx)”与“ASP.NET 处理程序”

▲▲▲欢迎转载传播本站原创文章,请保留来源。▲▲▲

本站永远终止与捏造“罪名”不支付广告费的某度联盟合作。

文章评论
标题:必填
内容:
专注软件研发 - 重庆云通科技有限公司
vkvi
vkvi

作者简介: vkvi,致力于 .NET Web 开发、移动开发的技术推广,在 .NET、SQL Server、Windows Server 等方面有深入研究和丰富经验,10 年间共计撰写文章 4000 余篇。 主持金融、国土、农业、电商等多个行业项目执行, 推行“技术提升生产力、人心决定成功率”的管理理论。 联系他