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 相关文章推荐
10个基于浏览器的JavaScript调试工具分享
Feb 07 Javascript
Js判断参数(String,Array,Object)是否为undefined或者值为空
Nov 04 Javascript
Array 重排序方法和操作方法的简单实例
Jan 24 Javascript
JavaScript设计模式之单件模式介绍
Dec 28 Javascript
JavaScript获取伪元素(Pseudo-Element)属性的方法技巧
Mar 13 Javascript
jQuery学习笔记之入门
Dec 14 Javascript
jquery网页加载进度条的实现
Jun 01 jQuery
vue下拉列表功能实例代码
Apr 08 Javascript
bootstrap table实现横向合并与纵向合并
Jul 18 Javascript
Vue程序化的事件监听器(实例方案详解)
Jan 07 Javascript
原生js实现简单轮播图
Oct 26 Javascript
vue内置组件keep-alive事件动态缓存实例
Oct 30 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图片库imagemagick安装方法
2014/09/23 PHP
ThinkPHP中redirect用法分析
2014/12/05 PHP
ThinkPHP实现附件上传功能
2017/04/27 PHP
ThinkPHP实现图片上传操作的方法详解
2017/05/08 PHP
收藏一些不常用,但是有用的代码
2007/03/12 Javascript
经常用的图片在容器中的水平垂直居中实例
2007/06/10 Javascript
IE下使用cloneNode注意事项分享
2012/11/22 Javascript
JavaScript中自定义事件用法分析
2014/12/23 Javascript
JavaScript显示表单内元素数量的方法
2015/04/02 Javascript
多种js图片预加载实现方式分享
2016/02/19 Javascript
详解为Angular.js内置$http服务添加拦截器的方法
2016/12/20 Javascript
JS日程管理插件FullCalendar中文说明文档
2017/02/06 Javascript
详解VUE-地区选择器(V-Distpicker)组件使用心得
2018/05/07 Javascript
JavaScript中的几种继承方法示例
2020/12/06 Javascript
Python socket C/S结构的聊天室应用实现
2014/11/30 Python
Python+selenium实现自动循环扔QQ邮箱漂流瓶
2018/05/29 Python
Python嵌套列表转一维的方法(压平嵌套列表)
2018/07/03 Python
使用Python3+PyQT5+Pyserial 实现简单的串口工具方法
2019/02/13 Python
Python 图像处理: 生成二维高斯分布蒙版的实例
2019/07/04 Python
利用python开发app实战的方法
2019/07/09 Python
Python使用matplotlib绘制Logistic曲线操作示例
2019/11/28 Python
Anaconda 查看、创建、管理和使用python环境的方法
2019/12/03 Python
python实现简单坦克大战
2020/03/27 Python
CSS3 Columns分列式布局方法简介
2014/05/03 HTML / CSS
美国网上购买眼镜:Eyeconic
2017/07/29 全球购物
爱尔兰最大的体育零售商:Life Style Sports
2019/06/12 全球购物
英语专业毕业个人求职自荐信
2013/09/21 职场文书
翻译专业应届生求职信
2013/11/23 职场文书
七一党建活动方案
2014/01/28 职场文书
网络书店创业计划书
2014/02/07 职场文书
幼儿园教师教育感言
2014/02/28 职场文书
初一学生评语大全
2014/04/24 职场文书
2015年音乐教研组工作总结
2015/07/22 职场文书
九年级化学教学反思
2016/02/22 职场文书
创业项目大全(适合在家创业的项目)
2019/08/15 职场文书
Redis+Lua脚本实现计数器接口防刷功能(升级版)
2022/02/12 Redis