前端周记-01
1.async(可选):异步加载,不会按序执行,它不依赖于任何其他js脚本,加载完成后立即执行,在执行期间,会阻塞HTML的解析。(无依赖的js可以按async方式加载)
2.defer(可选):异步加载,按序执行,它不同于async的地方是它不会在下载完成后立即执行,它会在所有元素解析完成之后,DOMContentLoaded 事件触发之前完成。(脚本代码依赖于页面中的DOM元素或者依赖于其他js文件)
// 注:DOMContentLoaded事件与load事件的区别:DOMContentLoaded会在HTML dom树 解析完成后触发,load事件会在所有资源加载完成后再触发
3.src(可选):不加async或defer的情况下同步加载、阻塞html解析,按序执行,在标签属性里加了src再在标签里加入代码时,标签里的代码不会被执行,src的主要作用是加载外部资源,亦可通过src进行跨域请求后端数据(Jsonp)
// 注:Jsonp的原理是通过script标签的src绕过跨域(跨域出现的原因是因为协议、端口、域名三者有一项不一致则会导致跨域),经过时间的洗礼,最终跨域的解决方案是(CORS:服务端通过设置-响应头-Access-Control-Allow-Origin:xxx 允许跨域的域名,亦可设置通配符*;但如果需要使用cookie,则不可以使用通配符,在服务端设置完响应头后,在js里就可以使用ajax去请求服务的内容。注:IE中为:XDomainRequest;其他浏览器为XMLHttpRequest;不过现阶段项目并不需要封装,完全可以使用已成熟的axios或其他封装好的模块包)
4.type(可选):表示代码块中脚本语言的内容类型(默认值为text/javascript),只有将type设置为module时,才可以在该代码块中使用import和export
//其余用的不是很多
题外话:html文件js文件最好不要全部内嵌在html文件中,最好使用外部引入,可维护、通过配置可以缓存js文件
2.所有script元素会依照它们在网页中出现的次序被解释。在不使用defer和async属性的情况下,包含在script元素中的代码必须严格按次序解释。
3.对不推迟执行的脚本,浏览器必须解释完位于script元素中的代码,然后才能继续渲染页面的剩余部分。为此,通常应该把script元素放到页面末尾,介于主内容之后及body标签之前。
4.可以使用defer属性把脚本推迟到文档渲染完毕后再执行。推迟的脚本原则上按照它们被列出的次序执行。
5.可以使用async属性表示脚本不需要等待其他脚本,同时也不阻塞文档渲染,即异步加载。异步脚本不能保证按照它们在页面中出现的次序执行。
6.通过使用noscript元素,可以指定在浏览器不支持脚本时显示的内容。如果浏览器支持并启用脚本,则noscript元素中的任何内容都不会被渲染。