使用JavaScript
使用JavaScript <Script>标签:
<script>xxx</script>这组标签,是用于在html页面中插入js的主要方法。主要有以下几个属性:
1.charset:可选。表示通过src属性指定的字符集。由于大多数浏览器忽略它,所以很少有人用它。
2.defer:可选的单属性。表示渲染完再执行的异步加载
3.async:可选的单属性。表示下载完就执行的异步加载
4.language:已废弃。是W3C的HTML标准,大多数浏览器忽略它
5.src:可选。表示包含要执行代码的外部文件。
6.type:可选。可以看作是language的替代品。表示代码使用的脚本语言的内容类型
"text/javascript":通用的值,兼容性最好
"application/javascript":较新的浏览器支持,IE8之前不支持
在HTML5标准中该属性无需指定,默认为"text/ecmascript"
JS代码嵌入的一些问题
1、通过src引入,标签内没有任何JS代码。虽然没有任何代码,也不能用单标签: <script type="text/javascript" src="demo.js" />,这个是错误的。也不能在里面添加任何代码: <script type="text/javascript" src="demo.js">alert('这句话不会执行');</script>
2、平稳退化不支持JavaScript处理: <noscript>您没有启用JavaScript</noscript>,在不支持或者禁用javascript的浏览器中会显示标签中的内容,否则不会显示标签中的内容。
script标签中的async和defer异步加载
正常情况下浏览器解析html是从上到下解析
当遇到script标签时,会向src属性提供的地址发出请求,并等待返回,待返回后立即运行js代码,运行完毕后再向下解析,整个过程是阻塞的
当使用了async属性时
<script src="https://www.aa.com/demo.js" async></script>
此时浏览器在解析过程中遇到该标签时,向src属性提供的地址发出请求后并不会阻塞的等待返回,而是向下继续解析html代码,当js返回后暂停解析html代码,运行返回的js代码,运行完毕后继续刚才暂停的位置向下解析html
如果有多个async脚本,是不能保证加载顺序的,哪个先下载完成先加载哪个
当使用了defer属性时
<script src="https://www.aa.com/demo.js" defer></script>
此时浏览器在解析过程中遇到该标签时,向src属性提供的地址发出请求后并不会阻塞的等待返回,而是向下继续解析html代码,当js返回后也不会暂停解析html代码,而是在html解析完毕,即将触发DOMContentLoaded事件的时候运行返回的js代码
如果有多个defer脚本,会按照它们在页面出现的顺序加载