我正在刷新我的javascript基础知识,我正在阅读的书中说明了以下内容(转述):
“添加defer属性,脚本元素是对浏览器的承诺,即您的脚本不会对DOM进行任何更改
我很好奇为什么会这样?由于延迟脚本直到渲染完成后才会执行,我认为在脚本中修改DOM是安全的。
答案 0 :(得分:1)
这是关于“DOM”意味着什么的术语混淆。咨询HTML4 spec on defer
给我们一个关于真实情况的暗示:
设置时,此布尔属性向用户代理提供脚本不会生成任何文档内容的提示(例如,javascript中没有“
document.write
”),因此,用户代理可以继续解析和渲染。
那么,你的书是什么意思
您的脚本不会对DOM进行更改
真的是
您的脚本不会对正在解析的文档文本进行更改
您的释义引用使用短语“DOM”来表示正在解析的HTML文档文本,而不是由该解析创建的JavaScript可访问的对象模型。你的deferred脚本没有理由在解析后不能改变DOM结构(即document
中的那个),但它当然不能改变被解析的文档文本,因为文档已经被完全解析了脚本运行。