为什么不应该使用延迟脚本修改DOM?

时间:2014-09-16 13:42:21

标签: javascript dom deferred-execution

我正在刷新我的javascript基础知识,我正在阅读的书中说明了以下内容(转述):

“添加defer属性,脚本元素是对浏览器的承诺,即您的脚本不会对DOM进行任何更改

我很好奇为什么会这样?由于延迟脚本直到渲染完成后才会执行,我认为在脚本中修改DOM是安全的。

1 个答案:

答案 0 :(得分:1)

这是关于“DOM”意味着什么的术语混淆。咨询HTML4 spec on defer给我们一个关于真实情况的暗示:

  

设置时,此布尔属性向用户代理提供脚本不会生成任何文档内容的提示(例如,javascript中没有“document.write”),因此,用户代理可以继续解析和渲染。

那么,你的书是什么意思

  

您的脚本不会对DOM进行更改

真的是

  

您的脚本不会对正在解析的文档文本进行更改

您的释义引用使用短语“DOM”来表示正在解析的HTML文档文本,而不是由该解析创建的JavaScript可访问的对象模型。你的deferred脚本没有理由在解析后不能改变DOM结构(即document中的那个),但它当然不能改变被解析的文档文本,因为文档已经被完全解析了脚本运行。