2. <script>元素的六个属性
- async:表示应该立即下载脚本,但是不影响其他脚本的下载。只对外部脚本有效。
- defer:表示脚本可以延迟到文档完全解析和显示之后再执行。只对外部脚本有效。
- charset:表示通过src属性指定代码的字符集。少用。
- type:可以看成language的替代属性。默认值为"text/javascript"。
- src:文件地址。
- language:已废弃。
2.1 使用误区
2.1.1 script代码内不可以出现"</script>"字符串
解决方法:使用转义符号"\"
例:alert("<\/script>");
2.1.2 不能省略结束标签
不管是引入外部js文件还是写js代码,不能省略"</script>"结束标签。
2.1.3 引入外部js文件的标签内不能嵌入js代码
在引入外部js文件的标签内不能嵌入js代码,嵌入代码无效。
2.2 延迟脚本defer
脚本会被延迟到整个页面都解析完毕后再运行,相当于告诉浏览器立即下载,但延迟执行。
HTML5 规范要求脚本按照它们出现的先后顺序执行,因此第一个延迟脚本会先于第二个延迟脚本执行,而这两个脚本会先于 DOMContentLoaded 事件执行。在现实当中,延迟脚本并不一定会按照顺序执行,也不一定会在 DOMContentLoaded 事件触发前执行,因此最好只包含一个延迟脚本。
2.3 异步脚本async
告诉浏览器立即下载文件,标记为"asnyc"不一定会按照先后顺序执行。建议异步脚本不要在加载期间修改DOM。
2.4 标签的位置
放在"<head>"和"<body>"中。现代Web应用程序一般都把JavaScript引用放在"<body>"元素中页面内容的后面。
2.5 文档模式
混杂模式和标准模式。一般用标准模式。
2.6 <noscript>元素
显示条件:
- 浏览器不支持脚本
- 浏览器支持脚本,但脚本被禁用
例:
<noscript>
<p>本页面需要浏览器支持(启用)JavaScript。</p>
</noscript>
2.7小结
- 引入外部文件时,src属性设置相应的URL,既可以是同一服务器上的文件也可以是不同域的文件。
- 在不使用defer和async属性的条件下,"<script>"元素会按照出现的先后顺序进行解析。
- 由于浏览器会先解析完不使用 defer 属性的<script>元素中的代码,然后再解析后面的内容,所以一般应该把<script>元素放在页面最后,即主要内容后面,</body>标签前面。
- 使用 defer 属性可以让脚本在文档完全呈现之后再执行。延迟脚本总是按照指定它们的顺序执行。
- 使用 async 属性可以表示当前脚本不必等待其他脚本,也不必阻塞文档呈现。不能保证异步脚本按照它们在页面中出现的顺序执行。
- 使用<noscript>元素可以指定在不支持脚本的浏览器中显示的替代内容。但在启用了脚本的情况下,浏览器不会显示<noscript>元素中的任何内容。
关键字:
script、async、defer、src、type、charset、language、text/javascript、noscript
学习笔记:JavaScript高级程序设计