在HTML中使用JavaScript
<script>
元素的src属性可以包含来自外部域的js文件
defer与async
defer:
<script
标签点定义了defer属性,脚本会被延迟到整个页面都解析完毕后再运行(立即下载,延迟执行)
<!DOCTYPE html>
<html>
<head>
<title>Example HTML Page</title>
<script type="text/javascript" defer="defer" src="example1.js"></script>
<script type="text/javascript" defer="defer" src="example2.js"></script>
</head>
<body>
</body>
</html>
<script>
包含的脚本将会延迟到浏览器遇到</html>标签后再执行。
先example1.js再example2.js
async:
与defer不同的是,标记async的脚本不会保证他们执行的先后顺序。
文档模式(doctype)
两种模式:混杂模式和标准模式
如果在文档的开始处没有发现文档类型声明,浏览器默认开启混杂模式,在混杂模式下不同浏览器的行为差异非常大。
<!-- HTML 4.01 严格型 -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<!-- XHTML 1.0 严格型 -->
<!DOCTYPE html PUBLIC
"-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!-- HTML 5 -->
<!DOCTYPE html>
小结
- 所有
<script>
元素都会按照他们在HTML页面中的位置依次被解析。在不使用defer和async属性的情况下,只有前面的js执行完后,后面的js才会被执行。 - 由于浏览器会先解析不使用defer属性的
<script>
元素的代码,然后再解析后面的内容,所以<script>
标签应放在最后。 - defer属性可以让脚本在文档完全呈现之后再执行
- async属性可以表示,脚本不必等待其他脚本,也不必阻塞文档呈现。