# JavaScript 词法与语法知识点树状整理

## 一、词法层面 (Lexical)
### 1. 词法单元 (Tokens)
   ├── **标识符**
   │    ├── 变量命名规则 (字母/$/_开头)
   │    └── 保留字 (if/function/let等)
   ├── **字面量**
   │    ├── 数字字面量 (123, 0x1F, 1.2e3)
   │    ├── 字符串字面量 ('abc', "xyz", `模板${str}`)
   │    ├── 布尔字面量 (true/false)
   │    ├── null字面量
   │    ├── 正则表达式字面量 (/pattern/flags)
   │    └── 模板字符串解析规则
   ├── **运算符**
   │    ├── 算术运算符 (+ - * / %)
   │    ├── 比较运算符 (== === > <)
   │    ├── 逻辑运算符 (&& || !)
   │    ├── 位运算符 (& | ^ ~)
   │    └── 特殊运算符 (?. ?? **)
   └── **分隔符**
        ├── 分号 (显式/隐式ASI规则)
        ├── 大括号 {} (作用域界定)
        ├── 方括号 [] (数组/属性访问)
        ├── 圆括号 () (函数调用/表达式分组)
        └── 逗号 , (参数/元素分隔)

### 2. 词法作用域
   ├── 变量查找规则 (由内向外)
   ├── 闭包实现基础
   └── 与this绑定的区别

### 3. 词法环境
   ├── 环境记录 (Environment Record)
   └── 外部引用 (Outer Reference)

## 二、语法层面 (Syntax)
### 1. 基本语法结构
   ├── **表达式**
   │    ├── 赋值表达式 (x = 10)
   │    ├── 算术表达式 (a + b * c)
   │    ├── 函数表达式 (const fn = function(){})
   │    └── 箭头函数表达式 (() => {})
   ├── **语句**
   │    ├── 声明语句 (let/const/function)
   │    ├── 流程控制
   │    │    ├── 条件语句 (if/else)
   │    │    ├── 选择语句 (switch)
   │    │    └── 循环语句 (for/while/do-while)
   │    └── 跳转语句 (break/continue/return)
   └── **声明**
        ├── 变量声明 (var/let/const)
        ├── 函数声明 (function foo(){})
        └── 类声明 (class MyClass{})

### 2. 复杂语法结构
   ├── **函数**
   │    ├── 参数传递规则
   │    ├── 作用域链创建
   │    └── 闭包机制
   ├── **对象**
   │    ├── 字面量语法 ({ key: value })
   │    ├── 属性访问 (./[])
   │    └── 方法定义 (shorthand)
   ├── **数组**
   │    ├── 字面量语法 ([1,2,3])
   │    └── 解构赋值 (const [a,b] = arr)
   ├── **类**
   │    ├── 构造函数语法
   │    ├── 继承机制 (extends)
   │    └── 静态成员
   └── **模块**
        ├── import语法
        └── export语法

### 3. 特殊语法机制
   ├── 自动分号插入 (ASI)
   ├── 严格模式限制
   │    ├── 禁止意外全局变量
   │    └── 限制重复参数名
   ├── 解构赋值
   │    ├── 对象解构 ({x,y} = obj)
   │    └── 数组解构 ([a,b] = arr)
   └── 展开语法 (...arr)

### 4. 运行时关联语法
   ├── this绑定规则
   │    ├── 默认绑定 (window/global)
   │    ├── 隐式绑定 (obj.method())
   │    ├── 显式绑定 (call/apply)
   │    └── new绑定
   └── 原型链访问机制
        ├── __proto__ 属性
        └── prototype 属性

> 注:词法层处理字符→Token的转换,语法层处理Token→AST的转换。两者共同构成JavaScript的编译前端基础。