Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么不应该用延迟脚本修改DOM?_Javascript_Dom_Deferred Execution - Fatal编程技术网

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

Javascript 为什么不应该用延迟脚本修改DOM?,javascript,dom,deferred-execution,Javascript,Dom,Deferred Execution,我正在复习我的javascript基础知识,我正在读的书说明了以下内容(意译): “将延迟属性添加到脚本元素是对浏览器的承诺,即您的脚本不会对DOM进行任何更改” 我很好奇为什么会这样?由于延迟脚本直到渲染完成后才会执行,因此我认为在脚本中修改DOM是安全的。这是一个关于“DOM”含义的术语混淆。咨询顾问给了我们一个关于实际情况的提示: 设置后,此布尔属性向用户代理提供一个提示,说明脚本不会生成任何文档内容(例如,javascript中没有“document.write”),因此,用户代理可以继

我正在复习我的javascript基础知识,我正在读的书说明了以下内容(意译):

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


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

这是一个关于“DOM”含义的术语混淆。咨询顾问给了我们一个关于实际情况的提示:

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

那么,你的书的意思是什么

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

真是

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


您的转述引用使用短语“DOM”来指代正在解析的HTML文档文本,而不是通过该解析创建的JavaScript可访问对象模型。没有理由说明延迟的脚本在解析后不能更改DOM结构(即,
文档
中的结构),但它肯定不能更改正在解析的文档文本,因为脚本运行时文档已经被完全解析。

Nicholas Zakas的“Professional Javascript”,这里也提到了:我认为这只是措词不当,意在表示您承诺不在脚本中使用document.write。在页面加载后进行小的dom更改没有什么错,只是不要进行大的更改,否则你会得到一个FOUC。啊,好的,这是有道理的。回顾这本书,我注意到它没有说“DOM”,这只是我的一个假设。确切的引语是“延迟的目的是指示脚本在执行时不会更改页面的结构”。谢谢你的详细解释。我对这个话题的作者也有同样的怀疑。谢谢你的澄清。