1、script标签的元素
html5为script标签定义了6个属性:
async:可选。表示脚本立刻下载,但是不应妨碍页面中的其他操作。比如下载其他资源或等待加载其他脚本。只对外部脚本有效。
charset:可选。表示通过src属性指定的代码的字符集。因为大多数浏览器会选择忽略这个属性,所以不常用。
defer:可选。表示脚本可以延迟到文档完全被解析和显示之后再执行。只对外部脚本有效。
language:已废弃。应当使用 type来代替。
src:可选。表示包含要执行的外部文件。至于为什么是可选,因为script标签标签内部可以写嵌入型脚本。如果使用外部js文件,那src就是必需的。
type:**必选。**可以看作language的替代属性:表示编写代码使用的脚本语言的内容类型(也称MIME类型),默认值为text/javascript。
补充知识:MIME类型(Multipurpose Internet Mail Extensions,多用途互联网邮件扩展类型)
注意:
1、在script标签内任何地方都不能出现</script>标签,如果使用需要用反斜杠”\“。
2、<\script />是xhtml中的用法,html以及xml不允许这样使用,必须要正确关闭script标签。
3、使用src指向的文件,扩展名不是必须的,因为浏览器不会检查包含js文件的拓展名。
4、当script标签确定了使用外联的方式时,内部的脚本会被忽略掉。
2、script标签的位置
1、最传统的方式是放在head里面,但这样会明显的影响页面加载速度,所以一般将script标签放到body的底部。此时(不使用defer和async的时候)script会按照先后顺序执行,解析并执行完上一个script后再去解析执行下一个。
2、延迟脚本defer,准确来讲,defer脚本是在浏览器遇到</html>后再执行。html5里明确规定defer只对外部script有效,所以支持html5的浏览器会自动忽略给嵌入式script设置的defer属性,但IE4-IE7依然支持嵌入式的defer,所以最稳妥的方法还是将defer脚本放到页面/body底部。
3、异步脚本async。当浏览器遇到async脚本时,会立即下载脚本,但与defer不同的是,async不保证脚本按先后顺序执行。
4、当浏览器不支持script时,应当如何隐藏?(虽然这个问题在现代已经基本不存在了)
<script><!--
console.log("support script");
//--></script>
当浏览器不支持script/被禁用script时,使用替代<\noscript>
<noscript>
<p>本页面需要浏览器支持(启用)JavaScript。</P>
</noscript>
5、对于defer,浏览器会首先下载并解析,但是执行会延迟到整个html被解析结束,并且保证按先后顺序执行。