一、在网页文件的<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而言,可以设置一个新的属性onclick,onclick的属性值就是一段JavaScript程序代码,当单击这个按钮后,onclick属性中的JavaScript代码就会被浏览器解释执行。如下所示:
<input type=button value=click οnclick="alert(new Date());">
注意:用作URL的JavaScript代码前要增加javascript:,以说明使用的是JavaScript协议,但事件属性中的JavaScript程序代码前则不用增加javascript:进行说明。
http://www.cnblogs.com/happiness/archive/2006/04/07/368984.html
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 οnclick="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能判断外部文档加载的状态,所以能够改变代码的加载顺序。