JavaScript 核心与 DOM 索引
NOTE
本索引涵盖 4 个 JavaScript 核心主题:JavaScript 核心概念、事件循环与异步编程、DOM 与 BOM、模块系统。深入理解这些底层机制,是从「会用框架」到「理解原理」的跃迁,是解决疑难 Bug 和性能问题的前提。
目录
| 主题 | 行数 | 核心定位 | 难度 |
|---|---|---|---|
| JavaScript核心与DOM | 5393 | ES2024+ 新特性、执行上下文、异步编程 | 中 |
| 事件循环与异步 | 5321 | Event Loop、Microtask、RAF、Worker | 高 |
| DOM与BOM深度 | 2920 | 节点操作、BOM、Intersection Observer | 中 |
| 模块系统 | 4919 | ES Modules、CommonJS、动态导入 | 中 |
阅读顺序建议
JavaScript 核心与 DOM 的四大主题之间存在依赖关系,建议按以下顺序学习:
1. 模块系统 → 理解 JavaScript 如何组织代码
↓
2. 事件循环 → 理解 JavaScript 如何执行代码
↓
3. DOM与BOM深度 → 理解浏览器如何渲染和交互
↓
4. JavaScript核心 → 综合理解语言特性和最佳实践
为什么是这个顺序
模块系统是基础,因为它决定了代码的组织方式和加载时机。学习 JavaScript 几乎一定会接触到 import/export,如果不能理解模块的加载机制,就会遇到各种奇怪的错误。
事件循环是理解 JavaScript 运行时的关键。JavaScript 是单线程的,所有代码都在事件循环中执行。理解事件循环,才能理解异步代码的执行顺序,理解 setTimeout、Promise、async/await 的本质。
DOM 与 BOM 是浏览器端的知识,讲述了 JavaScript 如何与网页交互。这部分内容偏应用,与前端开发实践紧密相关。
JavaScript 核心是综合性文档,涵盖语言特性、执行上下文、作用域链、闭包、原型链等核心概念,是前面三个主题的理论升华。
各主题详解
JavaScript核心与DOM.md
JavaScript 是 Web 的核心语言,理解其核心概念是前端开发的基础。这部分涵盖 ES2024+ 新特性、执行上下文、作用域链、闭包、面向对象等核心知识。
核心概念:
- 执行上下文与作用域链
- 闭包(Closure)机制
- 原型链与面向对象
- ES2024+ 新特性(Record & Tuple, Temporal, Decorators)
- Symbol 与迭代器协议
- 代理(Proxy)与反射(Reflect)
学习方法:
JavaScript 核心概念的最佳学习方法是理论与实践结合。建议先通读文档理解概念,然后通过实际编码来加深理解。特别推荐实现一些经典的设计模式,如发布订阅、工厂模式、装饰器等,来巩固对原型链和闭包的理解。
在 vibecoding 中的作用:
理解这些核心概念可以帮助你向 AI 描述更精确的问题,获得更准确的代码生成。当 AI 生成的代码出现奇怪的行为时,你也能快速定位问题所在。
事件循环与异步.md
事件循环是 JavaScript 异步编程的核心。理解微任务与宏任务的区别,Promise 的底层机制,async/await 的本质,是写出高效异步代码的基础。
核心概念:
- Call Stack(调用栈)
- Task Queue(任务队列)与 Event Loop
- Microtask(微任务)与 MacroTask(宏任务)
- Promise 底层机制
- async/await 语法糖本质
- requestAnimationFrame 与 requestIdleCallback
- Web Workers 与 Service Workers
- MessageChannel 跨上下文通信
常见面试题:
// 事件循环面试题
console.log('1');
setTimeout(() => console.log('2'), 0);
Promise.resolve().then(() => console.log('3'));
console.log('4');
// 输出顺序是:1 4 3 2
// 解释:同步代码先执行,然后是微任务(Promise),最后是宏任务(setTimeout)在 vibecoding 中的作用:
异步边界(async/await)和错误处理是 AI 生成代码的常见错误来源。理解事件循环可以帮助你审核和修正 AI 的输出,避免写出死循环或错误的异步逻辑。
DOM与BOM深度.md
DOM(Document Object Model)是操作网页内容的标准接口,BOM(Browser Object Model)提供了与浏览器交互的能力。深入理解这些 API 是构建高效交互的基础。
DOM 核心:
- DOM 树结构与节点类型
- 节点选择器(querySelector, querySelectorAll)
- 节点操作(createElement, appendChild, removeChild)
- 事件系统(addEventListener, 事件委托)
- 样式操作(getComputedStyle, CSSOM)
BOM 核心:
- window 对象全局 API
- navigator 设备信息
- location URL 操作
- history SPA 路由
- localStorage/sessionStorage
- IndexedDB 客户端存储
现代观察者 API:
| API | 用途 | 性能优势 |
|---|---|---|
| IntersectionObserver | 懒加载、无限滚动 | 无需 scroll 事件轮询 |
| ResizeObserver | 元素尺寸监听 | 比 window.resize 更精准 |
| MutationObserver | DOM 变更监听 | 比轮询更高效 |
| PerformanceObserver | 性能指标监听 | 精确的 Performance API |
在 vibecoding 中的作用:
DOM 操作是 AI 代码生成质量较高的领域,但批量操作和性能优化仍需人工审核。理解 DOM 渲染流水线和性能优化技巧,可以帮助你写出更高效的代码。
模块系统.md
模块系统是现代前端工程化的基础。从 CommonJS 到 ES Modules,从静态导入到动态导入,理解模块机制对于构建大型应用至关重要。
模块类型对比:
| 维度 | CommonJS | ES Modules |
|---|---|---|
| 语法 | require/module.exports | import/export |
| 加载时机 | 运行时 | 编译时 |
| 静态分析 | 不可 | 可(tree shaking) |
| 循环引用 | 有问题 | 可处理 |
| 浏览器支持 | 需打包 | 需打包/原生支持 |
| Node.js 支持 | 原生 | 原生(需配置) |
核心概念:
- 静态 import/export
- 动态 import()(代码分割)
- 模块解析算法
- Barrel 文件(索引模块)
- 双包问题(CJS/ESM)
- import maps
- Top-level await
在 vibecoding 中的作用:
模块导入路径是 AI 生成的常见错误点,理解模块解析规则可以帮助你快速定位和修正错误。动态导入(代码分割)也是优化应用加载性能的重要手段。
主题对比矩阵
JavaScript 执行模型
| 维度 | 事件循环 | 异步编程 | DOM/BOM | 模块系统 |
|---|---|---|---|---|
| 执行环境 | 浏览器/Node.js | 浏览器/Node.js | 仅浏览器 | 浏览器/Node.js |
| 核心概念 | Call Stack, Task Queue | Promise, async/await | DOM Tree, BOM | import/export |
| 难度 | 高 | 中 | 中 | 中 |
| 框架依赖度 | 无 | 无 | 部分 | 无 |
重要性评估
AI 辅助编程时代,这些底层知识还需要学吗?
Yes — 理解原理才能:
├─ 诊断性能问题(事件循环阻塞、重排重绘)
├─ 理解框架机制(React Scheduler, Vue 响应式)
├─ 写更高效的代码(避免不必要的重渲染)
├─ 调试疑难 Bug(异步边界、内存泄漏)
└─ 与 AI 协作更高效(知道提示词该问什么)
No — 可以交给 AI:
├─ CRUD DOM 操作(框架帮你做)
├─ 简单的事件绑定(框架帮你做)
├─ 基本的 HTTP 请求(fetch/axios)
└─ 简单的模块导入(bundler 帮你做)
Vibecoding 实践建议
AI 生成代码的质量差异
| 领域 | AI 生成质量 | 需人工审核 |
|---|---|---|
| DOM 基本操作 | ⭐⭐⭐⭐⭐ | 性能优化 |
| 事件绑定 | ⭐⭐⭐⭐⭐ | 事件委托 |
| BOM 基本操作 | ⭐⭐⭐⭐ | 浏览器兼容性 |
| 异步/Promise | ⭐⭐⭐ | 错误边界 |
| 事件循环 | ⭐⭐ | 边界情况 |
| 模块系统 | ⭐⭐⭐⭐ | 路径解析 |
常见问题与 AI 审核清单
// AI 生成的异步代码,这些点需要审核:
// ✅ 正确:完整的错误处理
async function fetchData() {
try {
const response = await fetch('/api/data');
if (!response.ok) throw new Error('Network response was not ok');
return await response.json();
} catch (error) {
console.error('Fetch failed:', error);
throw error; // 不要忘记重新抛出!
}
}
// ⚠️ AI 可能遗漏的:
// 1. 错误重新抛出
// 2. 加载状态管理
// 3. 竞态条件处理
// 4. 取消请求(AbortController)// AI 生成的 DOM 操作,这些点需要审核:
// ✅ 正确:批量操作优化
const fragment = document.createDocumentFragment();
items.forEach(item => {
const div = document.createElement('div');
div.textContent = item.name;
fragment.appendChild(div);
});
container.appendChild(fragment);
// ⚠️ AI 可能遗漏的:
// 1. DocumentFragment 批量插入
// 2. requestAnimationFrame 同步
// 3. 事件委托而非逐个绑定
// 4. getBoundingClientRect 调用次数知识图谱
JavaScript 执行模型全览
JavaScript 引擎
├─ Call Stack(调用栈)
│ ├─ 执行上下文
│ ├─ 变量环境
│ └─ 词法环境
│
├─ Heap(堆)
│ └─ 对象、闭包、DOM 节点
│
└─ Event Loop(事件循环)
├─ Microtask Queue(微任务队列)
│ ├─ Promise.then/catch/finally
│ ├─ queueMicrotask()
│ └─ MutationObserver
│
└─ Task Queue(任务队列/宏任务)
├─ setTimeout
├─ setInterval
├─ I/O 操作
└─ UI 渲染(浏览器)
DOM 操作性能优化
DOM 操作 → 触发 → 渲染流水线
布局计算(Layout)→ 绘制(Paint)→ 合成(Composite)
优化策略:
├─ 批量 DOM 操作
│ └─ DocumentFragment
│ └─ display: none → 修改 → display: block
│ └─ requestAnimationFrame
│
├─ 避免触发布局的操作
│ ├─ 读取 getBoundingClientRect 缓存
│ ├─ transform/opacity 优先
│ └─ will-change 提示
│
├─ 事件优化
│ ├─ 事件委托
│ └─ passive 事件监听器
│
└─ 现代 API
├─ IntersectionObserver(替代 scroll)
└─ ResizeObserver(替代 resize)
快速参考
事件循环执行顺序
// 执行顺序(由快到慢):
// 1. 同步代码
// 2. 微任务(Promise.then, queueMicrotask)
// 3. requestAnimationFrame
// 4. 宏任务(setTimeout, setInterval, I/O)
console.log('1'); // 同步
queueMicrotask(() => console.log('2')); // 微任务
Promise.resolve().then(() => console.log('3')); // 微任务
requestAnimationFrame(() => console.log('4')); // RAF(渲染前)
setTimeout(() => console.log('5'), 0); // 宏任务
// 输出:1, (2, 3), 4, 5
// 注:2 和 3 的顺序取决于加入队列的顺序模块导入对比
// CommonJS
const fs = require('fs');
module.exports = { readFile };
// ES Modules
import fs from 'fs';
export { readFile };
export default function() {}
// 动态导入
import('./module.js')
.then(module => module.default())
.catch(err => console.error(err));
// 或
const module = await import('./module.js');常见 DOM API
// 选择
document.querySelector('.class');
document.querySelectorAll('div > p');
element.closest('.parent');
// 创建
document.createElement('div');
document.createTextNode('text');
document.createDocumentFragment();
// 操作
parent.appendChild(child);
parent.insertBefore(newNode, refNode);
element.remove();
// 样式
window.getComputedStyle(element);
element.classList.add('active');
element.style.transform = 'translateX(100px)';
// 事件
element.addEventListener('click', handler, { once: true, passive: true });
element.removeEventListener('click', handler);关联文档
- JavaScript核心与DOM — JavaScript 核心概念
- 事件循环与异步 — Event Loop 与异步编程
- DOM与BOM深度 — DOM 节点操作
- 模块系统 — ES Modules 与 CommonJS
- TypeScript — 类型安全语言
- React — 组件化 UI 框架
- Vue — 渐进式框架
TIP
Vibecoding 建议:在 AI 辅助编程时代,理解这些底层知识的优先级可以降低——AI 可以帮你生成 80% 的 CRUD 代码。但理解事件循环、作用域链和 DOM 渲染流水线,可以帮助你审核 AI 的输出、诊断性能问题、与 AI 更高效地协作。建议按需学习,遇到问题时深入研究。
推荐学习路径
入门路径(1-2 周)
第1天:模块系统基础(import/export/require)
第2-3天:事件循环与异步(Promise/async-await)
第4-5天:DOM 操作基础(选择器/创建/操作)
第6-7天:BOM 基础(window/navigator/history)
第8-14天:JavaScript 核心概念(闭包/原型/执行上下文)
进阶路径(2-4 周)
第1周:深入事件循环(Microtask/Macrotask/RAF)
第2周:DOM 性能优化(重排重绘/合成层)
第3周:现代浏览器 API(IntersectionObserver/MutationObserver)
第4周:高级模式(发布订阅/观察者/装饰器)
专家路径(持续学习)
- 深入 V8 引擎源码
- 学习 Web Workers 与 SharedArrayBuffer
- 研究 TC39 提案与新特性
- 探索 JavaScript 运行时(Node.js/Bun/Deno)
NOTE
本索引文件用于组织 JavaScript 核心与 DOM 相关的学习内容。各子文档均有详细的代码示例和实战指导,建议按阅读顺序逐步学习。