javaScript是网页的执行引擎,负责交互与动态功能;浏览器通过script标签加载执行,推荐defer/async避免阻塞;dom操作需确保元素已加载;fetch替代XHR但需手动处理凭证和错误;真实项目难点在于时机、状态与错误边界控制。

javascript 不是网页的装饰品,它是让网页真正“活起来”的执行引擎——没有它,表单不能实时验证、按钮点击没反应、页面切换要整页刷新。
JavaScript 怎么被浏览器执行
浏览器加载 html 时遇到 标签(无论内联还是外部文件),会暂停 HTML 解析,下载并立即执行 js 代码。现代做法推荐用 defer 或 async 属性避免阻塞:
-
defer:脚本延迟到 HTML 解析完成后再执行,且按顺序执行 -
async:脚本异步下载,下载完立刻执行,不保证顺序(适合独立逻辑,如统计脚本) - 不加属性:默认同步阻塞,最慢也最危险
DOM 操作为什么常出错
常见错误是脚本在元素还没加载出来时就去操作它,比如在 里写 document.getElementById('btn'),结果返回 NULL。解决方式有三种:
- 把
放在前(最简单可靠) - 监听
DOMContentLoaded事件:document.addEventListener('DOMContentLoaded', () => { ... }) - 用
$(document).ready()?那是 jquery 的写法,原生 JS 不需要额外库
为什么 fetch 替代了 XMLHttpRequest
fetch 是更简洁、基于 promise 的网络请求接口,但默认不带 cookie,也不自动拒绝非 2xx 状态码:
立即学习“Java免费学习笔记(深入)”;
- 要发带凭证的请求,必须显式加
credentials: 'include' -
fetch(url).then(res => { if (!res.ok) throw new Error(res.status) })才能捕获 404/500 - IE 完全不支持
fetch,需用XMLHttpRequest或引入 polyfill - 上传文件时,
fetch配合formData比 XHR 更直观
真实项目里,JS 的复杂度不在语法,而在时机控制、状态同步和错误边界——比如用户快速连点两次提交按钮,或网络请求中途页面跳转,这些场景比学会 for...of 更容易导致线上问题。