script的常见属性
属性名 | 作用 |
---|---|
ansync | 异步加载脚本(不阻塞页面导致白屏),执行顺序不确定,先加载完的先执行 |
defer | 异步加载脚本(不阻塞页面导致白屏),按照引入的顺序执行 |
src | 引入的外部js的地址,不受跨域影响(JsonP的原理) |
type | 脚本语言的类型,大多数情况下为text/javascript,如果值为module,会被识别为es6模块,能出现import与export等关键字 |
script执行顺序
- 正常情况下(行内script或者外部引入但是没加defer 或ansync属性的)为顺序执行
会阻塞页面渲染,例如把脚本放在head标签中,但是脚本过多或者脚本执行时间过长,会导致页面长时间白屏,所以最佳实践是将script标签放在body元素之后
- 如果是使用了src属性从外部引入的脚本,同时也在标签内写了js代码,浏览器会忽略标签内的代码
- 如果使用了ansync属性,会异步加载脚本不阻塞页面,但是执行顺序不确定,先加载完脚本的先执行
- 如果使用了defer属性,会异步加载脚本不阻塞页面,按照引入的顺序执行
- 异步脚本都会在页面load事件之前执行,可能会在DOMContentLoaded事件的前后执行
noscript标签
只会在浏览器不支持或者禁用js脚本时渲染,可以在里面放置一些提示性的内容
<noscript>
<p>该页面已禁用JavaScript脚本,可能会导致部分功能不可用。</p>
</noscript>