模块依赖、文档就绪事件与运行时注入如何决定脚本执行时机?
简答题困难961 次浏览
参考答案与解析
# 核心结论
脚本执行时机由脚本类型、加载属性、依赖关系、文档解析进度和插入方式共同决定,不能只看标签在源码中的先后顺序。普通经典脚本默认阻塞解析;带 defer 的经典脚本并行下载、按文档顺序延后执行;带 async 的经典脚本下载完成后尽快执行且顺序不确定;模块脚本默认具有延后执行语义,并按模块依赖图实例化和求值。运行时注入的脚本还需要显式表达加载顺序,不能默认沿用静态标签的行为。
# 底层机制
解析器遇到没有 async 或 defer 的外部经典脚本时,通常暂停文档解析,等待脚本获取并执行。该脚本能访问此前已构建的节点,但无法自然访问后面尚未解析的结构。内联经典脚本也会立即执行,除非受到内容安全
