<script>标签6个属性
async: 可选。表示应该立即下载脚本,但不应妨碍页面中的其他操作,比如下载其他资源或等待加载其他脚本,只对外部文件有效。
charset: 可选。表示通过src属性指定的代码的字符集。由于大多数浏览器会忽略它的值,因此这个属性很少用。
defer:可选。表示脚本可以延迟到文档完全被解析和显示之后再执行,只对外部脚本文件有效。
language:已废弃。表示编写代码所用的脚本语言如JavaScript、JavaScript1.2、VBScript。
src:可选。表示包含要执行代码的外部文件。
type:可选。表示编写代码使用的脚本语言的内容类型。未指定默认为text/javascript.
<script>标签使用方式及解析顺序
使用<script>元素的方式:直接在页面中嵌入JavaScript代码和包含外部JavaScript文件。
使用<script>元素嵌入JavaScript时,只需为<script>指定type属性。包含在<script>元素内部的js代码将被从上之下依次解释。在解析外部js文件(包括下载该文件)时,页面的处理也会停止。因此一般在body标签结束后引入js脚本。
带有src属性的<script>标签内不应再有代码,浏览器只会下载并执行引入的外部脚本文件,嵌入的代码会被忽略。
不存在defer和async属性时,浏览器会按照引入的先后顺序解析外部引入的js文件。
延迟脚本
defer属性:立即下载但延迟执行,表明脚本在执行时不会影响页面的构造,也就是说脚本会被延迟到整个页面解析完毕后再运行。
<script type="text/javascript" defer="defer" src="test.js"></script>
异步脚本
async只适用于外部脚本,告诉浏览器立即下载文件,标记为async的脚本并不保证按照指定它们的先后顺序执行。指定async的目的在于不让页面等待两个脚本下载和执行,从而异步加载页面其他内容。
嵌入代码和外部文件
外部引入js优点:
可维护性、可缓存、 适应未来
文档模式DOCTYPE
混杂模式(quirks mode)和标准模式(standards mode),不声明文档类型则默认开启混杂模式。由于混杂模式下不同浏览器行为差异较大,浏览器行为没有一致性可言,因此不推荐使用混杂模式。标准模式关键字 strict 或者html提供的 <!DOCTYPE html>。混杂模式可以通过使用过渡型(transitional)或框架集型(frameset)文档类型来触发。
<noscript>
<noscript>元素保证浏览器在不支持js的情况下平稳退化,用以在不支持js 的浏览器中显示替代的内容。
<noscript>元素在以下情况下会被显示:
浏览器不支持脚本或者浏览器支持脚本,但脚本被禁用。
<noscript>
<p>本页面需要浏览器支持(启用)JavaScript。</p>
</noscript>
总结:
js插入页面需要使用<script>元素,分为内联和外部引入js文件。在包含外部js文件时,必须将src设置为指向对应文件的url,可以是包含它的页面同一个服务器上的文件也可以是其他域中的文件。
所有的<script>元素都会按照它们在页面中出现的先后顺序依次被解析。在不使用defer和async的情况下,只有在解析完前一个<script>元素中的代码后才会开始解析后面的<script>中的代码。
由于浏览器会先解析完不实用defer属性的<script>元素中的代码,然后再解析后面的内容,所以一般把<script>元素放在页面最后,即主要内容后面,</body>标签前。
使用defer属性可以让脚本在文档全完呈现之后再执行。延迟脚本总是按照它们的顺序执行。
使用async属性可以让当前脚本不必等待其他脚本,也不必阻塞文档呈现。不能保证异步脚本按照它们在页面中出现的顺序执行。