现在的位置: 首页 > 综合 > 正文

JavaScript脚本代码的位置及在页面中的执行顺序

2014年03月27日 ⁄ 综合 ⁄ 共 4939字 ⁄ 字号 评论关闭

JavaScript脚本代码的位置可以有以下三种情况

一、在网页文件的<script></script>标签对中直接编写JavaScript脚本代码

二、JavaScript本程序代码放置在一个单独的文件中,在网页文件中引用这个脚本程序

三、将脚本程序代码作为某个元素的事件属性值或超链接的href属性

第一种情况

       在网页文件的<script></script>标签对中直接编写JavaScript脚本代码。这是用得最多的情况,<script></script>标签对的位置并不是固定的,可以出现在<head></head><body></body>的任何位置。在一个HTML文档中可以有多段JavaScript代码。每段JavaScript代码可以相互访问,这与将所有代码放入同一对<script></script>之间的效果是一致的。例如,下面的内容:

<html>

<body>

<script>

var x = "这是我的第一个JavaScript程序";

</script>

<p>这是一个段落<p>

<script>

alert(x);

</script>

</body>

</html>

与下面的内容显示效果是一样的:

<html>

<body>

<p>这是一个段落<p>

<script>

var x = "这是我的第一个JavaScript程序";

alert(x);

</script>

</body>

</html>

 

第二种情况

我们还可以将JavaScript脚本放置在一个单独的文件中,这个文件以js为扩展名,其被称作为JavaScript脚本文件。

假设我们编辑了一个名为firstScript.js的脚本文件,文件内容如下:

var x =”这是我第一个JavaScript程序”;

alert();

然后,我们在同一个目录下编辑一个HTML文件,调用这处脚本,文件内容如下:

<html>

<script src=”firstScript.js” language=”javascript”>

</script>

</html>

 

第三种情况

       将脚本程序代码直接用作属性值。超链接标签<A>href属性可以使用JavaScript协议,如下:

       <a
href="javascript:alert(new Date());">javascript</a>

单击这个超链接,浏览器就会执行javascript:后面的脚本程序代码。

    另外,也可以使用HTML<link>标签 。<link> 标签定义文档与外部资源的关系。其最常见的用途是链接样式表。在用于样式表时,<link> 标签得到了几乎所有浏览器的支持。但是几乎没有浏览器支持其他方面的用途。例如:链接一个外部样式表:

    <link rel="stylesheet" type="text/css" href="theme.css" />

       JavaScript扩展了标准的HTML,为HTML标签增加了各种事件属性,比如,对Button而言,可以设置一个新的属性onclickonclick的属性值就是一段JavaScript程序代码,当单击这个按钮后,onclick属性中的JavaScript代码就会被浏览器解释执行。如下所示:

       <input
type=button value=click onclick="alert(new Date());">

注意:用作URLJavaScript代码前要增加javascript:,以说明使用的是JavaScript协议,但事件属性中的JavaScript程序代码前则不用增加javascript:进行说明。

http://www.cnblogs.com/happiness/archive/2006/04/07/368984.html


一、在HTML中嵌入Javasript的方法


           1,直接在Javascript代码放在标记对<script>和</script>之间;

           2,由<script />标记的src属性引用外部的js文件;

           3,使用HTML<link>标签。<link> 标签定义文档与外部资源的关系。其最常见的用途是链接样式表。在用于样式表时,<link> 标签得到了几乎所有浏览器的支持。但是几乎没有浏览器支持其他方面的用途。例如:链接一个外部样式表: 

<link rel="stylesheet" type="text/css" href="theme.css" />

          4,将脚本程序代码直接用作属性值。超链接标签<A>的href属性可以使用JavaScript协议,如下:

<a href="javascript:alert(new Date());">javascript</a>

单击这个超链接,浏览器就会执行javascript:后面的脚本程序代码。

JavaScript扩展了标准的HTML,为HTML标签增加了各种事件属性,比如,对Button而言,可以设置一个新的属性onclick,onclick的属性值就是一段JavaScript程序代码,当单击这个按钮后,onclick属性中的JavaScript代码就会被浏览器解释执行。如下所示:

<input type=button value=click onclick="alert(new Date());">


  5,利用javascript本身的document.write()方法写入新的javascript代码;


  6,利用Ajax异步获取javascript代码。



  二、Javascript在页面的执行顺序


  页面上的Javascript代码是HTML文档的一部分,所以Javascript在页面装载时执行的顺序就是其引入标记<script />的出现顺序,<script />标记里面的或者通过src引入的外部JS,都是按照其语句出现的顺序执行,而且执行过程是文档装载的一部分。

每个脚本定义的全局变量和函数,都可以被后面执行的脚本所调用。变量的调用,必须是前面已经声明,否则获取的变量值是undefined。

<script type="text/javscrpt">

alert(tmp); //输出 undefinedvar 

tmp = 1;

alert(tmp); //输出1 

</script>

同一段脚本,函数定义可以出现在函数调用的后面,但是如果是分别在两段代码,且函数调用在第一段代码中,则会报函数未定义错误。 

<script type="text/javscrpt">

aa(); //浏览器报错

</script>

<script type="text/javscrpt">

aa();//输出 1 

function aa()

{

alert(1);

}

</script>


  document.write()会把输写入到脚本文档所在的位置,浏览器解析完documemt.write()所在文档内容后,继续解析document.write()输出的内容,然后再继续解析HTML文档。


<script type="text/javascript">

document.write("<script type=\"text/javascript\" src=\"test.js\" temp_src=\"test.js\"><\/script>"); 

document.write("<script type=\"text/javascript\">"); 

document.write("alert(2);") 

document.write("alert(\"我是\" + tmpStr);"); 

document.write("<\/script>"); 

</script> <script type="text/javascript">

alert(3); 

</script>

test.js的内容是:var tmpStr = 1; alert(tmpStr);


  在Firefox和Opera中的弹出值的顺序是:1、2、我是1、3

  在IE中弹出值的顺序是:2、1、3,同时浏览器报错:tmpStr未定义原因可能是IE在document.write时,并未等待加载SRC中的 Javascript代码完毕后,才执行下一行,所以导致2先弹出,并且执行到document.write(’document.write(\"我是 \" + tmpStr)’)调用tmpStr时,tmpStr并未定义,从而报错。


  解决这个问题,可以利用HTML解析是解析完一个HTML标签,再执行下一个的原理,把代码拆分来实现:


<script type="text/javascript">

document.write("<script type=\"text/javascript\" src=\"test.js\" temp_src=\"test.js\"><\/script>"); 

</script> 

<script type="text/javascript">

document.write("<script type=\"text/javascript\">"); 

document.write("alert(2);") 

document.write("alert(\"我是\" + tmpStr);"); 

document.write("<\/script>"); 

</script> 

<script type="text/javascript">

alert(3); 

</script>

  这样IE下和其他浏览器输出值的顺序都是一直的了:1、2、我是1、3。

  三、如何改变Javascript在页面的执行顺序


  利用onload <script type="text/javascript">window.onload = f; function f(){ alert(1); } alert(2);</script>输出值顺序是 2、1。


 需要注意的是,如果存在多个winodws.onload的话,只有最后有一个生效,解决这个办法是:

 window.onload = function(){f();f1();f2();.....}利用2级DOM事件类型


 if(document.addEventListener)

{

window.addEventListener("load",f,false);

window.addEventListener("load",f1,false);

}

else

{

window.attachEvent("onload",f);window.attachEvent("onload",f1);

}


   IE中可以利用deferdefer作用是把代码加载下来,并不立即执行,等文档装载完毕之后再执行,有点类似onload,但是没有onload那样的局限性,可以重复使用,但是只在IE中有效,所以上面的例子可以修改成为

<script type="text/javascript">

document.write("<script type=\"text/javascript\" src=\"test.js\" temp_src=\"test.js\"><\/script>");

document.write("<script type=\"text/javascript\" defer=\"defer\">"); 

document.write("alert(2);");

document.write("alert(\"我是\" + tmpStr);");

document.write("<\/script>");

</script>

<script type="text/javascript">

alert(3);

</script> 

这样IE就不报错了,输出值的顺序变成:1、3、2、我是1

  四、利用Ajax


  因为xmlhttpRequest能判断外部文档加载的状态,所以能够改变代码的加载顺序。

        http://www.dzwebs.net/2008.html

抱歉!评论已关闭.