🌈 一、从奶茶铺开始学 JS
在这家「JavaScript 奶茶铺」里,每一个语法特性都有它的“岗位”。
| 模块 | 奶茶铺角色 | JS 对应概念 |
|---|---|---|
| 厨房柜子 | var / let / const | 变量声明作用域 |
| 点单系统 | Promise / async | 异步机制 |
| 库存表 | Set / Map | 数据结构 |
| 前台小姐姐 | Proxy / Reflect | 拦截与验证 |
| 总店后台 | Module / Export | 模块化管理 |
| 自动奶茶机 | Generator | 可暂停函数 |
🧋二、三种柜子:var、let、const
| 关键字 | 作用范围 | 特点 | 比喻 |
|---|---|---|---|
var | 函数作用域 | 会“提前声明” | 老式开放柜子(谁都能乱翻) |
let | 块级作用域 | 不会提前声明,不能重复声明 | 独立储物格(进门前要钥匙) |
const | 块级作用域 | 声明后不能改 | 锁死的储物柜(封印配方) |
📦 口诀:
“var 老好人,啥都能干;let 小心翼翼,只在小格;const 店长专用,动不得。”
🍹三、数组进化:从倒料机到自动奶茶机
| 方法 | 功能 | 奶茶铺记忆法 |
|---|---|---|
... | 拆/合数组 | 倒料机 |
find() | 查找元素 | 找出第一杯加错糖的 |
fill() | 批量填充 | 一次倒满所有空杯 |
includes() | 判断存在 | 看菜单里有没有“乌龙奶” |
flat() | 拍平嵌套数组 | 压扁奶茶堆成托盘 |
flatMap() | 拍平 + 映射 | 自动加料奶茶机 |
🧃 口诀:
“spread 拆杯,fill 补料,find 巡查,flat 压奶茶。”
☕ 四、函数篇:自动化奶茶机
| 特性 | 功能 | 比喻 |
|---|---|---|
| 默认参数 | 给默认口味 | 顾客不点则原味 |
剩余参数 ...rest | 收多余参数 | 打包多杯订单 |
| 箭头函数 | 简洁写法 | 自动封口机,不用 this |
| 严格模式 | 强制规范 | 上 ISO 管理体系 |
💡 口诀:
“箭头函数一键造,严格模式防乱搞。”
🧃五、对象升级:智能奶茶铺后台系统
| 新特性 | 功能 | 奶茶铺记忆法 |
|---|---|---|
| 属性简写 | {name} | 自动补全顾客名 |
| 方法简写 | serve(){} | 一键语音下单 |
[key] | 动态属性名 | 自动打标签 |
Object.assign | 合并对象 | 多店库存整合 |
Object.is | 更精准比较 | 智能检测机 |
Object.entries | 键值数组 | 菜单打印表 |
🧃 口诀:
“方括号起标签,assign 合并香,keys values 查库存。”
🍵六、Promise 与 async/await:前台点单系统
| 阶段 | 技术 | 比喻 |
|---|---|---|
| 回调函数 | 手动接单 | 累 |
| Promise | 链式流程 | 自动流水线 |
| Generator + co | 半自动机 | 一步步执行 |
| async/await | 全自动机 | 奶茶机自己泡茶 |
💡Promise 状态:
- pending:制作中 ⏳
- fulfilled:完成 ✅
- rejected:失败 ❌
📦 口诀:
“Promise 一家人,all 全成,race 竞速,any 有一就行。”
🌟 七、模块化:总部配方系统
| 语法 | 功能 | 比喻 |
|---|---|---|
export | 导出模块 | 总部发配方卡 |
import | 导入模块 | 分店拿配方 |
default | 主打产品 | 招牌奶茶 |
as | 重命名 | 改菜单称呼 |
* as | 全量导入 | 整本菜单搬走 |
💡 口诀:
“export 出货,import 进货。”
🎬 八、Generator:暂停与继续的奶茶剧场
| 概念 | 功能 | 奶茶铺记忆法 |
|---|---|---|
function* | 定义可暂停函数 | 奶茶分幕剧 |
yield | 暂停点 | 等下一幕 |
next() | 恢复执行 | 继续做茶 |
💡 口诀:
“yield 是暂停键,next 是播放键。”
🎀 九、Decorator:奶茶机加 Buff
| 装饰器 | 功能 | 比喻 |
|---|---|---|
@log | 日志记录 | 点单摄像头 |
@timestamp | 添加时间 | 打印出厂日期 |
@required | 参数校验 | 表单必填验证 |
💡 口诀:
“@前缀加魔法,不改逻辑加特效。”
🍯 十、Set / Map:库存与档案
| 类型 | 功能 | 比喻 |
|---|---|---|
| Set | 唯一集合 | 原料库存表 |
| Map | 键值集合 | 店铺档案盒 |
💡Set 运算:
- 并集:合菜单
- 交集:共售饮品
- 差集:限定款
💡 口诀:
“Set 去重不重复,Map 存档最靠谱。”
☕ 十一、WeakSet / WeakMap:短期关系登记簿
| 类型 | 特点 | 比喻 |
|---|---|---|
| WeakSet | 存对象,自动清理 | 临时借杯登记 |
| WeakMap | 键对象,自动清理 | 客人租赁档案 |
💡 口诀:
“WeakSet 存对象,WeakMap 记短情。”
💼 十二、Proxy + Reflect:前台小姐姐与后台系统
| 功能 | 拦截行为 | 奶茶铺比喻 |
|---|---|---|
| Proxy | 拦截操作 | 前台小姐姐接客 |
| Reflect | 原始执行 | 后台系统落实 |
| get / set / delete | 读写删监控 | 修改菜单、查价格 |
✨ 高级场景:
- 表单验证
- API 权限控制
- 响应式系统(Vue3 核心!)
💡 口诀:
“Proxy 拦截嘴,Reflect 动手腿;一改全店都更新!”
🌸 结语:让 JS 变得香甜易懂
从 var 到 Proxy,
从“柜子放料”到“自动奶茶机”