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 相关文章推荐
图片格式的JavaScript和CSS速查手册
Aug 20 Javascript
关于恒等于(===)和非恒等于(!==)
Aug 20 Javascript
理解Javascript_03_javascript全局观
Oct 11 Javascript
fmt:formatDate的输出格式详解
Jan 09 Javascript
Javascript冒泡排序算法详解
Dec 03 Javascript
node.js中的fs.fchown方法使用说明
Dec 16 Javascript
使用javascript将时间转换成今天,昨天,前天等格式
Jun 25 Javascript
jQuery实现类似老虎机滚动抽奖效果
Aug 06 Javascript
Bootstrap 3浏览器兼容性问题及解决方案
Apr 11 Javascript
vue服务端渲染页面缓存和组件缓存的实例详解
Sep 18 Javascript
Vue.js中的组件系统
May 30 Javascript
vue实现图书管理系统
Dec 29 Vue.js
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默认设置中的Notice警告的方法
2016/05/20 PHP
PHP7常量数组用法分析
2016/09/26 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
php合并数组并保留键值的实现方法
2018/03/12 PHP
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
2020/04/06 PHP
学习并汇集javascript匿名函数
2010/11/25 Javascript
基于jQuery的自动完成插件
2011/02/03 Javascript
让元素在网页中可拖动示例代码
2013/08/13 Javascript
jQuery事件处理的特征(事件命名机制)
2016/08/23 Javascript
Vuejs第八篇之Vuejs组件的定义实例解析
2016/09/05 Javascript
jQuery html表格排序插件tablesorter使用方法详解
2017/02/10 Javascript
vue2.0 中#$emit,$on的使用详解
2017/06/07 Javascript
js 概率计算(简单版)
2017/09/12 Javascript
Bootstrap一款超好用的前端框架
2017/09/25 Javascript
js中调用微信的扫描二维码功能的实现代码
2020/04/11 Javascript
[48:05]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VGJ.T vs VP
2018/03/31 DOTA
[01:20]2018DOTA2亚洲邀请赛总决赛战队LGD晋级之路
2018/04/07 DOTA
Python文本统计功能之西游记用字统计操作示例
2018/05/07 Python
解决Tensorflow使用pip安装后没有model目录的问题
2018/06/13 Python
python re.sub()替换正则的匹配内容方法
2019/07/22 Python
用python3 urllib破解有道翻译反爬虫机制详解
2019/08/14 Python
PyTorch 普通卷积和空洞卷积实例
2020/01/07 Python
基于python实现语音录入识别代码实例
2020/01/17 Python
Tensorflow轻松实现XOR运算的方式
2020/02/03 Python
ANINE BING官方网站:奢华的衣橱基本款和时尚永恒的单品
2019/11/26 全球购物
机电专业大学生求职信
2013/10/04 职场文书
阅兵口号
2014/06/19 职场文书
民事起诉状范文
2015/05/19 职场文书
学习经验交流会演讲稿
2015/11/02 职场文书
《三国志》赏析
2019/08/27 职场文书
python爬虫之爬取笔趣阁小说
2021/04/22 Python
MySQL中utf8mb4排序规则示例
2021/08/02 MySQL
Winsows11性能如何? win11性能测评多核竟比Win10差了10%
2021/11/21 数码科技
python数字类型和占位符详情
2022/03/13 Python
python3 字符串str和bytes相互转换
2022/03/23 Python