当浏览器发现
从加载非阻塞JavaScript与HTML5异步和延迟:
延迟属性
延迟属性向浏览器做出庄严promise。它声明您的JavaScript不包含任何document.write或DOM修改污秽:
浏览器将开始下载文件。js和其他延迟脚本并行运行,而不停止页面处理。延迟是在InternetExplorer版本4.0中实现的-超过12年了!从3.5版开始,Firefox中也提供了它。虽然所有延迟脚本都保证按顺序运行,但很难确定何时会发生。理论上,它应该发生在DOM完全加载之后,即DOMContentLoaded事件之前不久。实际上,这取决于操作系统和浏览器、脚本是否缓存以及其他脚本当时在做什么。
据我所知,dedeer
属性表示与浏览器的“合同”,您的脚本不会更改DOM。async
也是如此吗?
(当然,这并不能阻止您加载使用async
更改DOM的脚本-您只需要构造代码,以便在文档准备就绪或加载时完成DOM更改)。
不,它没有,也不要相信你链接到的那篇文章。defer
和async
属性告诉浏览器何时应该执行脚本,以及加载脚本时是否应该等待解析。这不是promise。
因此,使用这些属性中的任何一个都会阻止document.write
在脚本的位置写入,并且,在延迟
的情况下,启用直接的DOM修改来影响在脚本代码>元素。