延迟脚本 defer
<script>标签定义了defer属性。这个属性的用途是表明脚本在执行时不会影响页面的构造。也就是说,脚本会被延迟到整个页面都解析完毕后再运行。因此,在<script>元素中设置defer属性,相当于告诉浏览器立即下载,但延迟执行。
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Example HTML Page</title>
</head>
<body>
<script type="text/javascript" defer="defer" src="example1.js"></script>
</body>
</html>
在这个例子中,虽然我们把<script>元素放在了文档的<head>元素中,但其中包含的脚本将延迟到浏览器遇到</html<标签后再执行。
异步加载 async
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Example HTML Page</title>
</head>
<body>
<script type="text/javascript" async src="example1.js"></script>
</body>
</html>
指定async属性的目的是不让页面等待两个脚本下载和执行,从而异步加载页面其他内容,为此,建议异步脚本不要在加载期间修改DOM。
异步脚本一定会再页面load事件前执行,但可能会再DOMContentLoaded事件触发之前或之后执行。
文档模式
最初的俩种文档模式是:混杂模式(quirks mode)和标准模式(standards mode)。混杂模式会让IE的行为与(包含非标准特性的)IE5相同,而标准模式则让IE的行为更接近标准行为。
如果在文档开始初没有发现文档类型声明,则所有浏览器都会默认开启混杂模式。