Skip to content

序章

ES6+:从语言特性到运行时行为,重新理解现代 JavaScript 的根基

第一阶段:重新理解 ES6 的本质

  • ES6(ECMAScript 2015)不是一次功能更新,而是一次语言范式的跃迁 /ES6/Part01.md 标志着 JavaScript 进入模块化、强作用域、异步编程的新时代
  • 三大变革:作用域机制重构、异步流程控制、元数据操作能力 /ES6/Part02.md let/constPromiseProxy
  • 为何说 ES6 是 TypeScript 的基石? /ES6/Part03.md 没有 classmodulearrow function,TS 的类型系统将无处依附
  • Babel 的角色:语法转换器 vs 运行时补丁(polyfill) /ES6/Part04.md 哪些特性可转译?哪些必须依赖 core-js
  • V8 引擎优化:hidden classinline caching 如何因 ES6 改变? /ES6/Part05.md

第二阶段:深入变量声明与作用域革命

  • var 的函数作用域缺陷:变量提升(hoisting)如何导致逻辑错误?
    for(var i=0;... 中闭包捕获的是最终值
  • letconst 的块级作用域原理:词法环境(Lexical Environment)栈的实现
    {} 内部创建新环境记录(Environment Record)
  • 临时死区(Temporal Dead Zone)的本质:TDZ 是语法限制还是引擎行为?
    console.log(a); let a = 1; 抛出 ReferenceError 的底层检查机制
  • for (let ...) 的特殊处理:每次迭代创建独立词法环境
    解决闭包陷阱的根本原因
  • const 的不可变性边界:引用不变 vs 值不变
    const obj = {}; obj.name = 'John'; 为何合法?

第三阶段:穿透函数与异步抽象

  • 箭头函数的 this 绑定机制:词法继承而非动态绑定
    this 来自外层最近的非箭头函数或全局环境
  • 没有 argumentsprototype、不能用作构造函数的原因
    箭头函数是表达式而非完整函数对象
  • Promise 的状态机模型:pending → fulfilled/rejected 的不可逆转换
    状态变迁由 resolve/reject 函数触发
  • microtask queue 与事件循环:Promise.then() 为何比 setTimeout 先执行?
    DOM 操作后立即响应的实现基础
  • async/await 的本质:基于 Promise 的语法糖,生成器(Generator)的现代替代
    await 将异步代码“线性化”的编译原理

第四阶段:掌握对象与数据结构进化

  • 解构赋值的模式匹配语义:数组与对象的“反向构造”
    const [a, b] = arr; 背后的 [[Get]][[Set]] 操作
  • 默认参数与剩余参数:调用栈中的参数初始化逻辑
    默认值表达式在函数调用时求值
  • 增强对象字面量:方法简写、属性名表达式、super 调用
    { method() {} } 如何设置原型链上的函数
  • Symbol 类型的设计目的:创建唯一键,避免属性名冲突
    Object.getOwnPropertySymbols()Symbol.for()
  • MapSet 的优势:任意类型键、有序遍历、性能优化场景
    对比普通对象与数组的局限性

第五阶段:生产环境高频实战

  • 模块化机制:import/export 的静态分析特性与 Tree Shaking
    为何 import { foo } from 'mod' 可以摇掉未使用代码?
  • class 语法糖背后的原型链操作:extends 如何实现继承?
    __proto__[[Prototype]] 的链接过程
  • getter/setter 与属性描述符:Object.defineProperty 的现代写法
    实现响应式系统的基础
  • WeakMap / WeakSet:弱引用与内存泄漏防护
    适合存储私有数据或缓存映射
  • for...of 与可迭代协议:Symbol.iterator 如何统一遍历逻辑?
    数组、字符串、Map、Set 的统一接口

第六阶段:与现代框架和全栈架构衔接

  • ES6+ 是 Vue3 Composition API 的基石
    refreactive 依赖 Proxysetup 函数使用 let/const/import
  • React Hooks 与闭包:useState 依赖函数组件的每次执行形成新闭包
    let 的块级作用域确保状态隔离
  • NestJS 的 class + 装饰器模式完全建立在 ES6+ 之上
    @Controller()@Get() 依赖 reflect-metadata
  • Bun 如何利用 ES6 Module 加速启动?原生 ESM 支持避免 CommonJS 包装开销
  • Tree Shaking 在 Vite/Bun 构建中的极致发挥:静态导入分析如何消除死代码?

第七阶段:未来趋势与深度集成

  • ES2022+ 新特性前瞻:top-level awaitclass fieldslogical assignment
    这些特性如何进一步简化异步逻辑与状态管理?
  • 装饰器(Decorators)的复兴:Stage 3 提案对 NestJS、MobX 的影响
    元编程能力的标准化
  • Records & Tuples 提案:不可变数据结构的原生支持
    对 Redux、Immer 等库的潜在冲击
  • Pipeline Operator (|>):函数式编程在 JS 中的落地可能
    与 FP 库(如 Ramda)的协作
  • ES6+ 如何为 WASM + JS 混合开发提供桥梁?模块系统与类型互操作