script的src必须为URL而非本地路径;正确用相对或以/开头的绝对路径,并通过HTTP服务访问;async下载完立即执行,defer等DOM构建完按序执行;type缺省可能被当module处理;404仅警告不报错,需查Network面板。
script 标签的 src 属性必须是绝对或相对 URL,不能是本地文件路径(如 C:\xxx.js)
浏览器出于安全限制,直接用 file:// 协议打开 html 时,src 值写成 c:\project\script.js 或 /c:/project/script.js 都会失败,控制台报 net::err_file_not_found 或跨域错误。
正确做法只有两种:
- 用相对路径,比如
script.js、js/main.js、../lib/utils.js—— 路径基于当前 HTML 文件位置解析 - 用绝对路径,但必须以
/开头(表示站点根目录),例如/assets/js/app.js;注意这不是文件系统根目录,而是你起的本地服务器(如http://localhost:5000/)的根 - 开发阶段别双击 HTML 打开,用
python3 -m http.server、npx serve或 VS Code Live Server 插件启一个本地 HTTP 服务
async 和 defer 的行为差异直接影响执行时机和 DOM 可用性
不加这两个属性时,<script src="a.js"></script> 是同步阻塞加载:下载 + 解析 + 执行完才继续解析后续 HTML,容易卡住页面渲染。
选哪个取决于脚本用途:
-
async:适合完全独立的脚本(如统计代码、广告 SDK),下载时不阻塞 HTML 解析,但**下载完立刻执行**,不保证顺序,也不等 DOM 就绪 —— 所以不能在它里面直接操作document.getElementById -
defer:适合依赖 DOM 的初始化逻辑(如表单验证、菜单挂载),下载不阻塞解析,但**等到整个 HTML 解析完、DOM 构建完成后再按顺序执行** —— 这是最接近“放在



















