JavaScript代码应该放在HTML代码哪个位置比较好?


Posted in Javascript onOctober 16, 2014

在哪里放置 JavaScript 代码?

通常情况下,JavaScript 代码是和 HTML 代码一起使用的,可以将 JavaScript 代码放置在 HTML 文档的任何地方。但放置的地方,会对 JavaScript 代码的正常执行会有一定影响,具体如下所述。

放置于<head></head>之间

将 JavaScript 代码放置于 HTML 文档的 <head></head> 标签之间是一个通常的做法。由于 HTML 文档是由浏览器从上到下依次载入的,将 JavaScript 代码放置于<head></head> 标签之间,可以确保在需要使用脚本之前,它已经被载入了:

<html>

<head>

<script type="text/javascript">

……

JavaScript 代码

……

</script>

</head>

....

放置于<body></body>之间

也有部分情况将 JavaScript 代码放置于 <body></body> 之间的。设想如下一种情况:我们有一段 JavaScript 代码需要操作 HTML 元素。但由于 HTML 文档是由浏览器从上到下依次载入的,为避免 JavaScript 代码操作 HTML 元素时,HTML 元素还未载入而报错(对象不存在),因此需要将这段代码写到 HTML 元素后面,例子如下:

<html>

<head>

</head>

<body>

</body>

<div id="div1"></div>

<script type="text/javascript">

document.getElementById("div1").innerHTML="测试文字";

</script>

</html>

但通常情况下,我们操作页面元素一般都是通过事件来驱动的,所以上面这种情况并不多见。另外我们不建议将 JavaScript 代码写到 <html></html> 之外。

提示

如果 HTML 文档声明为 XHTML ,<script></script> 标签必须在 CDATA 部分内声明,否则 XHTML 将把 <script></script> 标签解析为另一个 XML 标签,里面的 JavaScript 代码可能不会正常执行。因此,在严格的 XHTML 中使用 JavaScript 应该像如下示例一样声明:

<html>

<head>

<script type="text/javascript">

<![CDATA[

JavaScript 代码

]]>

</script>

</head>

....

以上两种将 JavaScript 代码写到 HTML 文档中的方式,都是 HTML 文档内部引用 JavaScript 代码的方式。除了内部引用,还可以使用外部引用方式。

外部引用 JavaScript 代码

将 JavaScript 代码(不包括<script></script>标签)单独形成一个文档,并以 js 后缀命名,如 myscript.js ,并在 HTML 文档 <script></script> 标签中使用 src 属性来引用该文件:

<html>

<head>

<script type="text/javascript" src="myscript.js"></script>

</head>

....

在使用了外部引用 JavaScript 代码之后,其好处显而易见:
1.避免在 JavaScript 代码里使用 <!-- ... //-->
2.避免使用难看的 CDATA
3.公共的 JavaScript 代码可以被复用于其他 HTML 文档,也利于 JavaScript 代码的统一维护
4.HTML 文档更小,利于搜索引擎收录
5.可以压缩、加密单个 JavaScript 文件
6.浏览器可以缓存 JavaScript 文件,减少宽带使用(当多个页面同时使用一个 JavaScript 文件的时候,通常只需下载一次)
7.避免使用复杂的 HTML 实体,如可以直接使用 document.write(2>1) 而无需写作 document.write(2<1)

将 JavaScript 代码形成为外部文件,也会增加服务器的 HTTP 请求负担,在超高并发请求的环境下,这并不是一个好的策略。另外 在引用外部 js 文件时,需注意文件的正确路径。

Javascript 相关文章推荐
JQuery动态给table添加、删除行 改进版
Jan 19 Javascript
div浮层,滚动条移动,位置保持不变的4种方法汇总
Dec 11 Javascript
JS和函数式语言的三特性
Mar 05 Javascript
javascript实现带节日和农历的日历特效
Feb 01 Javascript
js给selected添加options的方法
May 06 Javascript
JavaScript+CSS实现仿天猫侧边网页菜单效果
Aug 25 Javascript
jQuery网页定位导航特效实现方法
Dec 19 Javascript
json的结构与遍历方法实例分析
Apr 25 Javascript
浅谈箭头函数写法在ReactJs中的使用
Aug 22 Javascript
微信小程序组件之srcoll-view的详解
Oct 19 Javascript
js实现从右往左匀速显示图片(无缝轮播)
Jun 29 Javascript
微信小程序实现聊天室
Aug 21 Javascript
JavaScript基础教程之alert弹出提示框实例
Oct 16 #Javascript
编程语言JavaScript简介
Oct 16 #Javascript
js父页面与子页面不同时显示的方法
Oct 16 #Javascript
Javascript Memoizer浅析
Oct 16 #Javascript
让JavaScript和其它资源并发下载的方法
Oct 16 #Javascript
JavaScript实现继承的4种方法总结
Oct 16 #Javascript
JavaScript实现网页截图功能
Oct 16 #Javascript
You might like
用PHP的ob_start();控制您的浏览器cache!
2006/11/25 PHP
php中mkdir函数用法实例分析
2014/11/15 PHP
asp.net+jquery滚动滚动条加载数据的下拉控件
2010/06/25 Javascript
jQuery UI 应用不同Theme的办法
2010/09/12 Javascript
jQuery的12招常用技巧分享
2011/08/08 Javascript
jQuery循环滚动展示代码 可应用到文字和图片上
2012/05/11 Javascript
JavaScript动态修改网页元素内容的方法
2015/03/21 Javascript
jQuery实现点击任意位置弹出层外关闭弹出层效果
2016/10/19 Javascript
微信小程序页面开发注意事项整理
2017/05/18 Javascript
详解node字体压缩插件font-spider的用法
2018/09/28 Javascript
Vue渲染过程浅析
2019/03/14 Javascript
原生js实现可兼容PC和移动端的拖动滑块功能详解【测试可用】
2019/08/15 Javascript
jquery 回调操作实例分析【回调成功与回调失败的情况】
2019/09/27 jQuery
[07:55]2014DOTA2 TI正赛第三日 VG上演推进荣耀DKEG告别
2014/07/21 DOTA
[01:03:33]Alliance vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
Python中的匿名函数使用简介
2015/04/27 Python
让python 3支持mysqldb的解决方法
2017/02/14 Python
Python实现简单文本字符串处理的方法
2018/01/22 Python
Python实现基于PIL和tesseract的验证码识别功能示例
2018/07/11 Python
Python django使用多进程连接mysql错误的解决方法
2018/10/08 Python
tornado+celery的简单使用详解
2019/12/21 Python
python读取多层嵌套文件夹中的文件实例
2020/02/27 Python
Python中三维坐标空间绘制的实现
2020/09/22 Python
python包的导入方式总结
2021/03/02 Python
戴尔新西兰官网:Dell New Zealand
2020/01/07 全球购物
贪睡宠物用品:Snoozer Pet Products
2020/02/04 全球购物
先进工作者获奖感言
2014/02/08 职场文书
工程售后服务方案
2014/06/08 职场文书
护林防火标语
2014/06/27 职场文书
硕士生找工作求职信
2014/07/05 职场文书
2015年试用期自我评价范文
2015/03/10 职场文书
2015年计划生育协会工作总结
2015/05/13 职场文书
2015年七夕情人节感言
2015/08/03 职场文书
Java由浅入深通关抽象类与接口(下篇)
2022/04/26 Java/Android
解决Windows Server2012 R2 无法安装 .NET Framework 3.5
2022/04/29 Servers
python解析照片拍摄时间进行图片整理
2022/07/23 Python