标签的 和 属性都用于异步加载外部 JavaScript 文件,目的是为了避免脚本加载和执行阻塞 HTML 文档的解析(即避免“阻塞渲染”)。 它们的主要区别在于 执行的时机 和 执行的顺序。 为了更直观地理解,我们可以把过程分为三个部分: 1. HTML 解析 (Parsing) 2. 脚本下载 (Fetching) 3. 脚本执行 (Execution) --- 1. 图解对比 假设 HTML 解析过程中遇到了一个 标签: 普通 (无属性): HTML 解析停止 -> 下载脚本 -> 执行脚本 -> HTML 解析继续 (完全阻塞) : HTML 解析继续 + 下载脚本 (并行) -> (下载完立即) HTML 解析暂停 -> 执行脚本 -> HTML 解析继续 (下载不阻塞,执行阻塞) : HTML 解析继续 + 下载脚本 (并行) -> HTML 解析完成 -> 执行脚本 (下载不阻塞,执行也不阻塞) --- 2. 详细区别 A. 执行时机 (When) async (Asynchronous - 异步): 脚本一旦下载完成,立即执行。 这意味着它会打断 HTML 的解析...