为什么使用 document.write 无法重载多个 defer 脚本?
在给定的 html 代码中,使用 document.write 方法无法正确重载多个 defer 脚本,而使用 appendChild 方法则可以。这是因为:
异步 defer 脚本会在文档的 readyState 属性变为 interactive 后执行,此时文档流已经关闭。当 document.write 被调用时,它会默认执行 document.open(),打开一个新的文档流以写入内容,从而覆盖页面内容。
此外,在使用 document.write 写入后没有调用 document.close() 关闭文档流,导致浏览器一直处于解析状态,即 DOMContentLoaded 事件之前。这意味着在 document.write 被调用后加载的脚本将被忽略。
因此,在 DOMContentLoaded 事件之前,调用 document.write 会覆盖页面内容并阻止脚本正确执行,从而导致无法重载多个 defer 脚本。