为什么使用 document.write 无法重载 defer 脚本
在给定的代码段中,在页面加载后,document.write 无法重载 defer 脚本 2.JS 和 3.js。
根源在于异步加载的 defer 脚本和 document.write 之间的交互。defer 脚本会在文档的 readyState 属性变为 interactive 后执行,但此时文档流已关闭。使用 write 进行写入将默认执行 document.open() 重新打开文档流进行写入,从而覆盖页面。
此外,执行 write 后没有调用 document.close() 关闭文档流,导致浏览器一直处于解析状态,即 DOMContentLoaded 事件触发之前。因此,无法对 defer 脚本进行重新加载。
而使用 appendChild 方法创建新脚本并将其附加到文档可以正常工作,因为此时文档流是打开的,并且新的脚本会在其 onload 事件触发时执行。