提问者:小点点

async属性是否表示不更改DOM的约定?


当浏览器发现

从加载非阻塞JavaScript与HTML5异步和延迟:

延迟属性

延迟属性向浏览器做出庄严promise。它声明您的JavaScript不包含任何document.write或DOM修改污秽:

浏览器将开始下载文件。js和其他延迟脚本并行运行,而不停止页面处理。延迟是在InternetExplorer版本4.0中实现的-超过12年了!从3.5版开始,Firefox中也提供了它。虽然所有延迟脚本都保证按顺序运行,但很难确定何时会发生。理论上,它应该发生在DOM完全加载之后,即DOMContentLoaded事件之前不久。实际上,这取决于操作系统和浏览器、脚本是否缓存以及其他脚本当时在做什么。

据我所知,dedeer属性表示与浏览器的“合同”,您的脚本不会更改DOM。async也是如此吗?

(当然,这并不能阻止您加载使用async更改DOM的脚本-您只需要构造代码,以便在文档准备就绪或加载时完成DOM更改)。


共1个答案

匿名用户

不,它没有,也不要相信你链接到的那篇文章。deferasync属性告诉浏览器何时应该执行脚本,以及加载脚本时是否应该等待解析。这不是promise。

因此,使用这些属性中的任何一个都会阻止document.write在脚本的位置写入,并且,在延迟的情况下,启用直接的DOM修改来影响在脚本元素。