<link>标签不能引入外部JavaScript文件,因为HTML规范中rel属性无"script"等合法值,浏览器会忽略rel="script";JS必须用<script src="...">引入,其加载、解析、执行由<script>专属承担。

<link> 标签不能引入外部 JavaScript 文件。
为什么 <link> 不支持 JS 引入
HTML 规范中,<link> 的 rel 属性定义了资源与当前文档的关系类型,合法值如 "stylesheet"、"icon"、"preload" 等,但没有 "script" 或类似语义。浏览器遇到 <link rel="script" href="xxx.js"> 会直接忽略,不加载也不执行。
常见误操作:<link rel="stylesheet" href="app.js"> —— 这会让浏览器尝试把 JS 当 CSS 解析,控制台报错 Failed to parse stylesheet,且脚本完全不运行。
<script src="..."> 是唯一标准方式
引入外部 JS 必须用 <script> 标签,并设置 src 属性:
立即学习“前端免费学习笔记(深入)”;
- 放在
</body>前是最稳妥的位置,确保 DOM 已就绪 - 若需在
<head>中加载,必须加defer(推荐)或async,否则可能因 DOM 未生成而报document.getElementById(...) is null - ES 模块需写成
<script type="module" src="main.mjs"></script>,此时defer行为默认生效
容易被忽略的路径和加载失败原因
即使用了正确的 <script src="...">,仍可能加载失败,常见原因包括:
- 路径写成相对路径但 HTML 文件位置变了,比如
src="js/main.js"在子目录页里就变成sub/js/main.js—— 改用根相对路径src="/js/main.js"更可靠 - 服务器未配置 MIME 类型,返回
text/plain而非application/javascript,Chrome 会拒绝执行并报Refused to execute script - 本地双击打开 HTML(
file://协议),部分浏览器会因 CORS 策略阻止type="module"加载,换成 HTTP 服务(如python3 -m http.server)才能验证
真正要引入 JS,就别碰 <link>。它只管链接,不管执行;JS 的加载、解析、执行逻辑全由 <script> 承担——这是 HTML 渲染管线里不可绕过的分工。



















