属性:javascript
async: 可选。是否当即下载脚本,仅对外部脚本文件有效。html
charset: 可选。经过src属性指定代码的字符集。(不多用)java
defer: 可选。是否延迟到DOM彻底被解析和显示以后再执行。仅对外部脚本文件有效。浏览器
language: 已废弃。缓存
src: 可选。包含要执行代码的外部文件。带有此属性的<script>元素,浏览器不会再解析其<script>之间的代码。能够是外部域的地址,但要当心使用。app
type: 可选。编写代码使用的脚本语言的内容类型(MIME类型),默认text/javascript.less
不少地方将async描述为“是否异步执行”,但毕竟还得看defer,因此我感受仍是《高程》里的描述准确些。异步
截取runoob.com中关于async属性的解释(http://www.runoob.com/tags/att-script-async.html):async
使用<script>元素方式学习
直接在页面中嵌入JavaScript代码
注意不要在代码中的任何位置出现</script>, 若是必定须要,能够用转义字符"\", 如"<\/script>".包含外部JavaScript文件
XHTML文档中能够省略关闭标签</script>, 但不符合HTML规范(得不到某些浏览器尤为是IE的正确解析).
传统的作法是把全部<script>元素放在<head>内,这样作意味着,必须等到所有JavaScript代码都被下载、解析和执行完成以后,才开始加载页面内容。因此对于JavaScript比较多的页面来讲,会致使浏览器在呈现页面时出现明显延时。
因此现代Web应用程序通常把JavaScript所有放在<body>最后。或者经过defer设置什么时候加载。
设置defer="defer"后,当前脚本会优先于DOMContentLoaded事件【详见第十三章】执行)。注意:在现实中,延时脚本并不必定会按照顺序执行,也不必定会在DOMContentLoaded事件出发前执行,所以最好只包含一个延迟脚本。
async属性。是否当即下载文件。亦不保证按照指定他们的前后顺序执行。
指定async属性的目的通常是:不让页面等待两个脚本下载和执行,从而异步加载页面其余内容。为此,建议异步脚本不要在其加载期间修改DOM.
异步脚本必定会在页面的load事件前执行,但可能会在DOMContentLoaded事件触发以前或以后执行。
支持的浏览器: Firefox 3.6+, Safari 5+ 和 Chrome.
可扩展超文本标记语言(XHTML), 是将HTML做为XML的应用而从新定义的饿一个标准。编写XHTML要比HTML严格得多,并且直接影响可否在嵌入JavaScript代码是使用<script/>标签。
<script> function compare(a, b){ if(a < b){ //此处在XHTML中,"<"会被解析为下一个标签的开始 alert("A is less than B"); }else if(a > b){ alert("A is greater than B"); }elss{ alert("A is equal to B"); } } </script>
解决方案:
1.用相应的HTML实体(<)替换代码中全部小于号(<), 如:
if(a < b){}
2.用一个CData片断来包含JavaScript代码。在XHTML(XML)中,CData片断是文档中的一个特殊区域,这个区域能够包含不须要解析的任意格式的文本内容。如:
<script type="text/javascript"> <![CDATA[ function compare(a, b){ if(a < b){ //此处在XHTML中,"<"会被解析为下一个标签的开始 alert("A is less than B"); }else if(a > b){ alert("A is greater than B"); }elss{ alert("A is equal to B"); } } ]]> //若须要解决有些浏览器不兼容XHTML、不支持CData片断,可使用注释将CData标记注释掉。 </script>
注:将页面的MIME类型指定为"application/xhtml+xml"的状况下会触发XHTML模式。并非全部浏览器都支持以这种方式提供XHTML文档。
外部文件有如下优势:
可维护性
可缓存
适应将来(经过外部文件来包含JavaScript无需使用前面提到XHTML或注释hack。HTML和XHTML包含外部文件的语法是相同的)