JavaScript教程

以 ECMAScript 2026 为核心语言基线,结合现代浏览器 Web Platform,覆盖类型与对象、函数与闭包、原型与类、模块、异步、DOM、Web API、工程化、运行机制与综合实验。

JavaScript 程序设计学习路线与教程导航

本章覆盖:课程定位:ECMAScript 核心语言 + 浏览器 JavaScript 必要 Web Platform 能力;语言基线:ECMAScript 2026(ECMA-262 第 17 版);浏览器 API 不使用“ES 版本”描述,按现代主流浏览器与 MDN Baseline/兼容性核验;学习路径:语言基础 → 对象/集合 → 函数/闭包/this → 原型/类 → 迭代/模块 → 异步 → DOM/浏览器 API → 工程化 → 运行机制;ECMAScript、浏览器 Web API、Node.js、npm、框架之间的层次边界;学完后的去向:Vue/React、TypeScript、Node.js、前端工程化与全栈开发。

JavaScript 起源、ECMAScript 标准与语言生态

本章覆盖:Brendan Eich、Netscape 与 JavaScript 的起源;JavaScript 与 ECMAScript 的关系;ECMA-262 年度标准演进;TC39 proposal stage 与正式标准的区别;ECMAScript 2026 作为课程语言基线;浏览器、Node.js、Deno/Bun 等宿主环境与语言核心的区别。

值、变量与 JavaScript 动态类型

本章覆盖:变量保存值,类型属于运行时值;JavaScript 是动态类型语言;primitive 与 object 两大类;赋值与重新绑定;对象值共享引用语义;动态类型不等于弱类型的简单同义词。

String、模板字符串与常用文本处理

本章覆盖:字符串不可变;索引与 length 的 UTF-16 code unit 语义;includes / startsWith / endsWith;slice / substring;replace / replaceAll;split / trim;template literal 与插值。

函数声明、函数表达式与一等函数

本章覆盖:function declaration;function expression;匿名/命名函数表达式;函数是对象和一等值;函数可以作为参数和返回值;函数声明与表达式的初始化时机不同。

Prototype、[[Prototype]] 与原型链

本章覆盖:对象拥有内部 [[Prototype]];属性查找沿原型链进行;Object.getPrototypeOf / setPrototypeOf;__proto__ 作为历史访问器不作为首选教学 API;原型链终点通常为 null;原型继承不是 Java/C++ 类复制模型。

RegExp 基础:模式、标志与常用方法

本章覆盖:RegExp literal / constructor;g / i / m / s / u / y 等常见 flags;test / exec;String.match / matchAll / replace;捕获组与命名组;复杂正则需关注可读性与性能。

同步、异步、回调与宿主环境

本章覆盖:JavaScript 执行栈;异步能力通常由宿主环境提供;callback;同步回调与异步回调的区别;异步不等于并行;CPU 密集任务仍可能阻塞主线程。

DOM 树、Node、Element 与 Document

本章覆盖:DOM 是 Web Platform,不属于 ECMAScript;Document;Node;Element;Text;父子/兄弟关系;HTML 解析后形成 DOM 树。

npm、package.json 与依赖分类

本章覆盖:npm 是 Node.js 生态工具,不属于 ECMAScript;package.json;dependencies / devDependencies;scripts;package name / version;项目依赖与全局安装的边界。

Execution Context、Call Stack 与环境模型

本章覆盖:执行上下文作为教学高层模型;call stack;global/module/function code;Lexical Environment / Environment Record 的规范概念;闭包与环境引用;不要把博客中的“执行上下文对象结构图”当标准真实内存布局。

浏览器中的 JavaScript:引擎、宿主环境与 Web API

本章覆盖:JavaScript engine 的角色;浏览器提供 DOM、Fetch、Timers 等宿主 API;ECMAScript 规范不定义 DOM;同一 JavaScript 语言可以运行在不同宿主环境;V8、SpiderMonkey、JavaScriptCore 只作为实现示例;浏览器兼容性与语言标准版本不是同一问题。

七种原始类型与 object

本章覆盖:undefined;null;boolean;number;bigint;string;symbol;object 与 function 的特殊 typeof 表现。

Unicode、码点、UTF-16 与字符串遍历边界

本章覆盖:JavaScript string 基于 UTF-16 code units;Unicode code point;代理对 surrogate pair;codePointAt / fromCodePoint;for...of 按 Unicode code point 迭代的高层语义;字符串 length 不等于用户可见字符数量。

箭头函数与普通函数的语义差异

本章覆盖:arrow function;表达式体与代码块体;箭头函数没有自己的 this;没有自己的 arguments;不能作为 constructor 使用;不要仅因为语法短就一律使用箭头函数。

构造函数、prototype 与 new

本章覆盖:constructor function;Function.prototype 属性;实例 [[Prototype]] 与 Constructor.prototype;new 的高层步骤;显式返回对象对 new 结果的影响;不要把 prototype 与 [[Prototype]] 混为一谈。

RegExp 现代能力与 RegExp.escape

本章覆盖:lookahead / lookbehind 的基础;Unicode property escapes;dotAll;named capture;RegExp.escape(ES2025);动态拼接正则时必须转义用户文本。

Promise 状态、resolve/reject 与 then

本章覆盖:pending / fulfilled / rejected;Promise executor;resolve / reject;then;Promise 状态一旦 settled 不再改变;Promise 表示未来结果而不是主动线程。

AbortController、超时与请求取消

本章覆盖:AbortController;AbortSignal;fetch signal;主动取消;超时需要组合 timer/signal 或宿主新能力;取消异常需要区别普通网络失败。

SemVer、package-lock 与可重复安装

本章覆盖:Semantic Versioning 基础;^ / ~ 等版本范围;package-lock.json;直接依赖与传递依赖;npm install 与 npm ci 的典型差异;锁文件应纳入团队版本管理。

堆、引用与垃圾回收高层模型

本章覆盖:对象生命周期由可达性与实现 GC 管理;垃圾回收不是 ECMA-262 规定的具体算法;V8 等引擎实现可以采用分代/标记等策略;手动把变量设 null 不等于立即 GC;资源释放与内存回收不是完全同一问题。

var、let、const 与块级作用域

本章覆盖:var 的函数/全局作用域;let / const 的块作用域;const 限制重新赋值,不冻结对象;重复声明规则;循环中的 let 绑定;现代代码默认优先 const,需要重新绑定时使用 let。

class 语法、constructor、method 与 field

本章覆盖:class;constructor;prototype methods;public instance fields;static fields/methods;class 本质仍建立在 ECMAScript 对象/原型模型上;class 声明具有 TDZ 语义。

ArrayBuffer、TypedArray 与 DataView

本章覆盖:ArrayBuffer;Uint8Array 等 TypedArray;共享 buffer 与 view;DataView;字节序参数;二进制文件、协议、图像等场景。

dynamic import 与 top-level await

本章覆盖:import() 返回 Promise;按需加载;代码分割的工程关联;top-level await 仅在 module 中;TLA 会影响依赖模块求值顺序;不要用动态 import 代替清晰静态依赖的默认方案。

Promise 链、值穿透与错误传播

本章覆盖:then 返回新 Promise;返回普通值;返回 Promise/thenable 的 assimilate 高层语义;catch;链式错误传播;避免嵌套 Promise 形成 callback-style 结构。

ESM-first 项目结构与模块边界

本章覆盖:按业务/功能拆分模块;避免全局变量;清晰 public API;循环依赖控制;副作用模块;browser / Node host 边界。

常见前端内存泄漏与生命周期管理

本章覆盖:长期存活的全局引用;未清理事件监听器;timer;DOM 与 JavaScript 引用关系;闭包捕获过大对象图;缓存无界增长;通过 DevTools Memory 实际验证而非猜测。

Fetch 数据看板与请求状态管理

本章覆盖:Fetch;Promise / async-await;AbortController;loading/error/success 状态;并发请求组合;DOM 更新;错误处理与重试边界。

Node.js 作为开发工具链宿主的最小认知

本章覆盖:Node.js 是 JavaScript 运行时而不是 ECMAScript 标准本身;node file.js;Node REPL;浏览器 globalThis / window 与 Node 全局环境的区别;本课程只把 Node 用于开发工具和脚本验证,不展开 Node 后端 API。

Hoisting、TDZ 与声明初始化顺序

本章覆盖:变量/函数声明的创建阶段概念;var 的初始化行为;let/const 与 Temporal Dead Zone;function declaration 的提升行为;class 声明与 TDZ;“提升”是教学模型,不应简化成源码物理移动。

词法作用域、作用域链与 Lexical Environment

本章覆盖:global / module / function / block scope;lexical scope;作用域链;内部环境对外部环境的查找;var 与 let/const 的作用域差异;规范 Lexical Environment/Environment Record 只建立高层模型。

extends、super 与派生类初始化

本章覆盖:extends;super();super.method;派生类 constructor 中 this 的初始化时机;static inheritance;继承链与原型链关系。

Iterable 与 Iterator Protocol

本章覆盖:iterable protocol;iterator protocol;Symbol.iterator;next() → { value, done };for...of / spread / destructuring 与 iterable 的关系;自定义 iterable。

Import Attributes 与 JSON Modules

本章覆盖:import attributes 的定位;JSON modules;不同宿主对非 JavaScript module type 的支持需要兼容性核验;规范能力与构建工具自定义 loader 的区别;不要将旧 import assertions 口径混入现代规范。

Promise finally 与资源/状态收尾

本章覆盖:finally;finally 不接收 fulfilled value / rejection reason 作为普通参数;finally 通常保持原结果穿透;finally 抛错会改变链结果;UI loading 状态和资源清理场景。

textContent、innerHTML 与 DOM XSS 边界

本章覆盖:textContent;innerHTML;插入文本和插入 HTML 的区别;不可信字符串进入 innerHTML 的 XSS 风险;不要自行用不完整正则实现 HTML sanitizer;安全输出优先文本 API。

Vite、开发服务器与构建工具的角色

本章覆盖:Vite 作为现代前端工程工具示例;dev server;production build;依赖预构建/打包只建立高层认识;工具链不是 JavaScript 语言的一部分;React/Vue 等框架建立在语言与构建工具之上。

事件循环输出题的规范化分析方法

本章覆盖:先区分同步执行与异步注册;再区分 Promise jobs/microtasks 与 browser tasks;逐步维护 call stack 和 queues;async/await 转换为 Promise continuation 思考;DOM rendering / rAF 不应被粗暴塞进简单“宏任务”公式;Node event loop 不应直接套浏览器模型。

无限滚动 / 分页数据浏览器

本章覆盖:异步数据获取;分页状态;事件或 IntersectionObserver 可作为 Web API 扩展;请求取消;防重复加载;DOM 性能;错误恢复。

注释、语句、分号、ASI 与代码风格

本章覆盖:单行与多行注释;语句与表达式;Automatic Semicolon Insertion(ASI);不能把“JavaScript 完全不需要分号”当绝对规则;return / throw 等换行陷阱;一致格式化风格的重要性。

typeof、null、undefined 与缺失值判断

本章覆盖:typeof;typeof null === 'object' 的历史行为;undefined 与 null 的语义差别;未声明标识符与 undefined 值的区别;可选值判断;避免把所有 falsy 值误判成“缺失”。

闭包 Closure 与状态保持

本章覆盖:函数与其词法环境组合;外层函数返回后仍可访问捕获绑定;私有状态;函数工厂;事件处理与异步回调;闭包本身不等于内存泄漏。

私有字段 #、静态私有成员与封装

本章覆盖:#privateField;private method;static #private;私有名称是语法级私有,不等同于命名约定;派生类不能直接访问父类 private element;私有字段与 WeakMap 历史方案的关系。

Iterator Helpers

本章覆盖:Iterator.from;map / filter / flatMap;take / drop;some / every / find / reduce;惰性处理;迭代器 helper 与 Array 方法在中间数组上的差别。

CommonJS 与 ESM 的边界

本章覆盖:CommonJS 属于 Node.js 生态,不是 ECMA-262 模块规范;require / module.exports;ESM import/export;同步加载模型与静态模块图差异;现代前端默认以 ESM 为主;Node 具体互操作规则留给 Node.js 课程。

classList、style、dataset 与属性

本章覆盖:getAttribute / setAttribute;DOM property 与 HTML attribute 的区别;classList;style;dataset;布尔属性等特殊映射的基础。

Cookie、SameSite、Secure 与 HttpOnly 边界

本章覆盖:Cookie 是 HTTP/Web 平台机制;document.cookie 的客户端可见边界;HttpOnly Cookie 无法被 JavaScript 读取;Secure;SameSite;认证方案设计属于 Web 安全/后端协作专题。

Bundler、Transpiler 与 Polyfill 的区别

本章覆盖:bundle;transpile;Babel 等转换工具的定位;polyfill;syntax support 与 runtime API support 是两个问题;现代原生 ESM 与打包构建的选择。

this、闭包、原型与类型转换高频综合模型

本章覆盖:this 看调用形式;闭包看词法作用域;原型看属性查找链;类型转换看具体操作符和抽象转换规则;把四个模型分开可以避免大量“JavaScript 玄学题”;输出题最终必须回到规范规则。

模块化音乐播放器前端核心

本章覆盖:Audio API 可作为项目宿主 API;模块化状态;事件系统;播放列表 Array/Map;计时与进度更新;DOM 交互;资源与监听器清理。

strict mode 与模块代码

本章覆盖:"use strict";strict mode 改变部分错误行为与 this 语义;ES modules 自动使用严格模式;严格模式禁止或限制部分旧语法;现代项目优先模块化而非依赖全局经典脚本。

Number、IEEE 754、NaN、Infinity 与精度

本章覆盖:JavaScript Number 采用双精度二进制浮点;整数安全范围;Number.isSafeInteger;NaN 与 Number.isNaN;Infinity;0.1 + 0.2 等浮点精度问题。

继承、组合与 Mixin

本章覆盖:is-a 与 has-a;组合对象;mixin 函数模式;多重继承不是 JavaScript class 的直接机制;通过组合避免深继承树;行为复用与状态共享分离。

Generator Function 与 yield

本章覆盖:function*;generator object;yield;暂停/恢复执行;生成器实现 iterator protocol;惰性序列。

Error、try/catch/finally 与异常传播

本章覆盖:throw;try / catch / finally;Error;TypeError / RangeError / ReferenceError / SyntaxError;异常沿调用栈传播;finally 中返回值/throw 可能覆盖原控制流的风险。

async / await

本章覆盖:async function 总是返回 Promise;await 暂停当前 async 执行路径;await rejected Promise 会抛出异常;try/catch 与 await;串行 await;模块 top-level await。

History、Location 与单页导航基础

本章覆盖:location;history.pushState / replaceState;popstate;hashchange;SPA router 的浏览器机制基础;真正路由框架属于后续课程。

浅拷贝、深拷贝与对象图问题

本章覆盖:spread/Object.assign 只复制一层;循环引用;Date/Map/Set/TypedArray 等特殊对象;structuredClone 的适用范围;自定义 clone 需要先定义业务语义;深拷贝不是所有状态管理问题的最佳解。

Web Worker 计算任务实验

本章覆盖:主线程与 Worker;postMessage;structured clone;CPU 密集任务;任务状态;取消/终止;响应性对比。

BigInt 与整数边界

本章覆盖:BigInt 字面量;Number 与 BigInt 不能直接混合算术;BigInt 适合超出安全整数范围的整数;BigInt 不能表示小数;JSON 对 BigInt 的默认限制;业务金额不能因为有 BigInt 就忽略十进制模型问题。

this:调用方式决定绑定

本章覆盖:普通函数 this 不是词法变量;方法调用 this;独立函数调用与 strict mode;显式绑定;constructor 调用;DOM/框架回调中 this 需要结合宿主调用方式判断。

Symbol 与 Well-known Symbols

本章覆盖:Symbol 基本类型;唯一属性键;Symbol.for / keyFor;Symbol.iterator;Symbol.toPrimitive;Symbol.toStringTag 等协议钩子基础。

yield*、next(value)、return 与 throw

本章覆盖:yield* 委托;generator.next(value);return();throw();双向通信的复杂度;常规业务代码优先简单生成器使用方式。

自定义 Error、cause 与 AggregateError

本章覆盖:自定义 Error 子类;name / message / stack 的宿主实现边界;Error cause;AggregateError;Promise.any 等聚合错误场景;保留根因信息。

异步并发:串行、并行启动与并发控制

本章覆盖:连续 await 导致串行;先创建 Promise 再 Promise.all;任务依赖决定是否可并行;并发数量限制需要额外控制逻辑;不要对大量任务无脑 Promise.all;错误策略与取消策略需要一并设计。

Timers:setTimeout、setInterval 与时间调度

本章覆盖:setTimeout;setInterval;clearTimeout / clearInterval;delay 是最小延迟意图而非精确调度保证;嵌套计时器与后台页面可能被节流;长任务会延迟 timer callback。

单元测试:Vitest/Jest 与断言基础

本章覆盖:test case;assert / expect;同步与异步测试;异常测试;setup / teardown;Vitest/Jest 属于第三方工具,不是 JavaScript 标准库。

隐式类型转换与 ToPrimitive 高层模型

本章覆盖:字符串、数字、布尔转换;对象到原始值的转换高层过程;String / Number / Boolean 显式转换;+ 同时承担数值加法与字符串连接;复杂隐式转换降低可读性;面试题重点是理解规则而非背诡异输出。

浅拷贝、深拷贝与 structuredClone 边界

本章覆盖:对象/数组 spread 是浅拷贝;Object.assign 是浅拷贝;嵌套对象共享引用;structuredClone 属于宿主 Web/Node API 而不是 ECMA-262 核心;JSON stringify/parse 不是通用深拷贝方案;函数、DOM 节点、特殊对象的复制需要具体分析。

call、apply、bind

本章覆盖:Function.prototype.call;apply;bind;参数传递差异;bind 返回新函数;绑定 this 与部分参数;箭头函数 this 不能被 call/apply/bind 重绑定。

Proxy 与 Reflect

本章覆盖:Proxy target / handler;get / set / has 等 traps;Reflect 对应基础对象操作;Proxy invariants 的概念;响应式、验证、日志等框架场景;Proxy 不是所有对象拦截需求的默认答案。

Async Iterable、Async Iterator 与 for await...of

本章覆盖:Symbol.asyncIterator;async iterator next() 返回 Promise;for await...of;流式异步数据消费;同步 iterable 也可被 for await 消费的边界;与 Web Streams / Node streams 的后续衔接。

资源清理与显式资源管理版本边界

本章覆盖:传统 try/finally 资源清理;using / await using 与 DisposableStack 已达到 Stage 4 但计划进入后续年度标准;ECMAScript 2026 核心课程不依赖显式资源管理语法;浏览器支持仍有限;需要使用时必须明确版本与兼容性。

Event Loop、Task 与 Microtask

本章覆盖:ECMAScript Job 与浏览器 event loop 属于不同规范层;浏览器 task queue;microtask queue;Promise reactions 属于 microtask/job 语义;一个 task 后通常清空 microtasks;事件循环执行顺序是前端面试高频核心。

事件委托 Event Delegation

本章覆盖:利用 bubbling 在祖先统一监听;event.target;closest;动态元素无需逐个绑定;减少监听器并简化动态列表逻辑;并非所有事件都按同样方式冒泡。

浏览器 DOM 测试与测试替身边界

本章覆盖:纯函数优先单元测试;DOM 环境测试需要浏览器或模拟环境;mock / stub / spy 的高层概念;不要过度 mock 造成测试脱离真实行为;端到端测试属于后续工程化专题。

V8/JIT/Hidden Class 等实现知识边界

本章覆盖:JIT 属于具体引擎实现;V8 hidden classes / inline caches 只作性能机制认知;这些细节会随引擎版本变化;不能用 V8 细节解释所有 JavaScript 引擎;业务优化优先算法、数据结构、I/O 和渲染瓶颈。

==、===、Object.is 与 SameValueZero

本章覆盖:严格相等 ===;宽松相等 ==;Object.is;NaN 与 ±0 的差异;Map/Set/includes 等使用 SameValueZero 的高层认识;业务代码通常优先 ===。

Map 与 Set

本章覆盖:Map 任意键;Set 唯一值;size / get / set / has / delete;Map/Set 可迭代;与普通 Object / Array 的选型;现代 Set 集合运算方法的基础认识。

高阶函数、回调与函数组合

本章覆盖:higher-order function;callback;函数作为策略;map/filter 等 API 的函数式基础;纯函数与副作用的工程认知;组合要优先可读性。

queueMicrotask、setTimeout 与渲染时机边界

本章覆盖:queueMicrotask;setTimeout 属于 Web API;0ms 不等于立即执行;microtask 饥饿风险;requestAnimationFrame 与渲染周期的关系;不要把所有非 Promise 回调都粗暴叫“宏任务”而忽略规范差异。

Web Workers、structured clone 与线程边界

本章覆盖:Worker 运行在独立执行上下文;postMessage;structured clone algorithm;worker 无法直接访问页面 DOM;适合 CPU 密集计算移出主线程;SharedArrayBuffer/Atomics 只作高级补充。

兼容性、Baseline 与渐进增强

本章覆盖:ECMAScript 标准存在不等于所有浏览器立即实现;MDN Baseline / browser compatibility 用于 Web 实践核验;feature detection;polyfill / fallback;progressive enhancement;Temporal / using 等新能力必须单独核验实际支持。

算术、逻辑、比较与短路求值

本章覆盖:算术运算符;关系运算符;&&、||、!;短路返回操作数而非强制 boolean;逻辑表达式常用于默认值/条件执行;副作用与可读性控制。

WeakMap 与 WeakSet

本章覆盖:弱引用式键/元素关系的高层概念;WeakMap 键必须是可作为弱引用目标的对象/符号类型边界;WeakMap/WeakSet 不可枚举;关联元数据与缓存场景;不能靠 WeakMap 精确观察垃圾回收时机。

柯里化、偏函数与函数工厂

本章覆盖:currying;partial application;闭包保存配置;bind 实现部分参数;真实业务中用于 API 适配/配置复用;不把函数式技巧写成所有代码的默认风格。

异步错误、unhandled rejection 与取消模型

本章覆盖:Promise rejection;忘记 await / return 的错误丢失风险;全局 unhandled rejection 只能作为最后防线;JavaScript Promise 本身没有通用 cancel 方法;浏览器常通过 AbortController 协作取消;取消应作为 API 协议设计。

同源策略、CORS 与前端网络安全边界

本章覆盖:same-origin policy;CORS 是浏览器访问控制协议,不是 JavaScript 绕过限制的技巧;preflight 的高层认识;credentials;XSS / CSRF 基础区别;前端安全规则必须与服务器策略共同设计。

TypeScript、React/Vue 与 Node.js 的课程边界

本章覆盖:TypeScript 是 JavaScript 的静态类型化超集/工具链生态,不属于 ECMA-262 JavaScript;Vue/React 是 UI 框架;Node.js 是宿主运行时;学习框架前必须掌握闭包、this、原型、模块、Promise、DOM/事件基础;后续专项课程不应反过来替代 JavaScript 核心理解。

JSON:parse、stringify 与数据交换边界

本章覆盖:JSON 与 JavaScript 对象不是同一概念;JSON.parse;JSON.stringify;replacer / reviver 基础;undefined、function、Symbol、BigInt 等边界;JSON 只是一种数据格式,不保留对象原型和方法。

防抖 debounce 与节流 throttle 的语言基础

本章覆盖:闭包保存 timer/状态;高频事件控制;debounce 与 throttle 的行为差别;leading / trailing 等工程选项基础;this 与参数透传;取消/清理是健壮实现的重要边界。

Date、Intl 与 Temporal 的版本/兼容性边界

本章覆盖:Date 的时间戳与本地/UTC 方法;Intl.DateTimeFormat / NumberFormat;时区与本地化问题;Temporal 已进入 ECMAScript 2026 标准;Temporal 浏览器支持仍需按 MDN compatibility 单独核验;课程不要求用 Temporal 替代所有现有 Date 代码。

递归、调用栈与尾调用语义边界

本章覆盖:递归;基线条件;调用栈;Maximum call stack size exceeded 的常见原因;ECMAScript 规范存在尾位置调用语义但实际实现支持需核验;不要依赖尾调用优化保证业务正确性。

循环:for、while、for...of 与 for...in

本章覆盖:for / while / do...while;break / continue;for...of 遍历 iterable 的值;for...in 遍历可枚举字符串键;不要用 for...in 作为普通数组遍历默认方案;循环与数组高阶方法的选择。