【ES6】week16-summary

作者:mario 发布时间: 2026-08-27 阅读量:5 评论数:0

第 16 周总结:进阶特性 + 综合实战 — 阶段1 毕业 🎓

蜗牛往上爬 · 前端工业可视化学习笔记 第 16 周总结
本周补齐进阶特性(深浅拷贝、防抖节流、Proxy 伏笔),用毕业项目"智能设备监控台"把 16 周所学全部整合。阶段1 正式收官——你已经具备工程化思维的前端开发者地基。


目录


一、本周学了什么

天数

主题

核心知识点

产出

Day 1-2

进阶特性

深浅拷贝、内存泄漏、Symbol/Proxy、防抖节流

进阶练习

Day 3-6

综合实战

毕业项目完整开发

智能设备监控台

知识图谱

进阶特性与综合实战
├── 进阶特性
│   ├── 浅拷贝:... / assign(嵌套共享引用)
│   ├── 深拷贝:JSON / structuredClone / 手写递归
│   ├── 内存泄漏:定时器 / 监听 / 全局变量
│   ├── Symbol:唯一值、隐藏属性
│   ├── Proxy:get/set 拦截(Vue3 响应式原理)
│   └── 防抖(停下来执行)/ 节流(固定频率)
│
└── 毕业项目:智能设备监控台
    ├── 分层:api → store → render → app
    ├── 模型:Class + getter + 静态工厂
    ├── 状态:Map 设备表 + Set 告警 + 模块私有
    ├── 异步:Promise 接口 + async/await 刷新
    ├── 交互:防抖搜索 + 3 秒轮询
    └── 视觉:Grid 卡片 + 告警呼吸灯动画

二、核心知识速记

三条铁律

  1. 展开是浅拷贝——嵌套对象改了会连坐,需要独立就用深拷贝

  2. 定时器和监听不用就清——内存泄漏三大杀手之二

  3. 输入用防抖,滚动用节流

高频写法

// 深拷贝
const copy = structuredClone(obj);

// 防抖(闭包 + 高阶函数)
const debounce = (fn, delay = 400) => {
  let timer = null;
  return (...args) => {
    clearTimeout(timer);
    timer = setTimeout(() => fn(...args), delay);
  };
};

// 节流
const throttle = (fn, interval = 300) => {
  let last = 0;
  return (...args) => {
    if (Date.now() - last >= interval) {
      last = Date.now();
      fn(...args);
    }
  };
};

// Proxy 拦截(Vue3 响应式雏形)
const proxy = new Proxy(data, {
  get(target, key) { return target[key]; },
  set(target, key, value) { target[key] = value; return true; }
});

毕业项目的数据流

setInterval(3s) → app.refresh()
  → await api.fetchDevices()      # 异步拉数据
  → store.syncDevices(data)       # Map/Set 更新状态
  → getStats/getDevices/getAlerts # 派生数据
  → render.xxx()                  # 模板字符串渲染
  → CSS 动画                      # 告警呼吸灯

这就是"单向数据流"——Vue/React 框架做的事就是把这条链自动化。


三、本周踩过的坑

坑点 1:以为展开就是深拷贝

// ❌ 嵌套对象共享引用
const copy = { ...device };
copy.location.workshop = "二号";
console.log(device.location.workshop);  // "二号" ⚠

// ✅ 深拷贝
const copy = structuredClone(device);

坑点 2:JSON 深拷贝丢了函数

const obj = { name: "A", fn: () => {}, date: new Date() };
const copy = JSON.parse(JSON.stringify(obj));
console.log(copy.fn);        // undefined ⚠ 函数丢了
console.log(copy.date);      // 字符串,不是 Date 对象 ⚠
// 含函数/Date → 用 structuredClone 或手写递归

坑点 3:防抖函数直接绑定

// ❌ 每次绑定都创建新 timer,防抖失效
searchInput.addEventListener("input", e =>
  debounce(search, 400)(e.target.value)
);

// ✅ 先创建防抖后的函数,再绑定
const debouncedSearch = debounce(search, 400);
searchInput.addEventListener("input", e => debouncedSearch(e.target.value));

坑点 4:轮询刷新覆盖了搜索状态

// ❌ 轮询时忽略关键词,搜索结果被重置
renderDevices(getDevices(), grid);

// ✅ refresh 时带上当前关键词
renderDevices(getDevices(searchInput.value.trim()), grid);

坑点 5:innerHTML 全量重建丢失输入焦点

// 搜索时重渲染整个列表 → 正在输入的 input 若也在重建范围内会失焦
// ✅ 项目里 searchInput 在列表外,不受影响
// ✅ 通用解法:只重建列表区域,不动输入框

四、自测清单

  • [ ] 浅拷贝和深拷贝的区别?浅拷贝的坑?

  • [ ] 三种深拷贝方式及各自局限?

  • [ ] 内存泄漏的三大来源?怎么防?

  • [ ] Symbol 的特性?怎么实现"隐藏属性"?

  • [ ] Proxy 能拦截什么?和 Vue3 什么关系?

  • [ ] 防抖和节流的区别?各自适合什么场景?

  • [ ] 防抖为什么必须用闭包?

  • [ ] 毕业项目的模块分层和依赖方向?

  • [ ] 数据从接口到页面的完整流转?

  • [ ] Map/Set 在项目里分别承担什么?为什么不用数组/对象?


五、阶段1 总回顾

16 周知识全景

周次

主题

核心收获

第 7 周

环境与类型

三环境运行、六类型、=== 铁律

第 8 周

流程与函数

分支循环、作用域、闭包、this

第 9 周

对象数组 JSON

数据结构、四大高阶方法、JSON

第 10 周

原型 DOM 事件

原型链、事件委托、增删改查

第 11 周

let/const 解构

块级作用域、解构赋值

第 12 周

箭头函数 扩展

现代语法、展开运算符

第 13 周

对象扩展 Set/Map

可选链、??、数据结构选型

第 14 周

异步编程

Promise、async/await、并发

第 15 周

Class 模块化

继承多态、ESM 分层

第 16 周

进阶 + 实战

深浅拷贝、防抖节流、毕业项目

阶段1 沉淀的作品

作品

技术栈

亮点

设备管理系统

DOM + 事件

增删改查 + 搜索 + 委托

模块化设备管理系统

Class + ESM

五层架构

智能设备监控台

全部整合

轮询 + 告警 + 防抖 + 动画

阶段0+1 合计

32 周 | 41+ 篇博客 | 3 个完整项目 | 静态大屏 + 交互系统 + 实时监控台

最值得记住的 10 条铁律

  1. 永远用 ===,不用 ==

  2. 默认 const,需要改用 let,告别 var

  3. 数组按位置解构,对象按属性名解构

  4. 回调用箭头函数,对象方法用普通函数

  5. || 会误伤 0 和 “”,兜底用 ??

  6. 去重一行:[...new Set(arr)]

  7. fetch 必查 response.ok

  8. 无依赖请求用 Promise.all 并发

  9. 子类 constructor 先 super()this

  10. 输入防抖、滚动节流、展开是浅拷贝


六、下一站预告

阶段2:智慧工厂大屏项目(0-3 个月)—— 第一张求职名片

方向

内容

Canvas 基础

绘图 API、动画、像素操作

ECharts

图表库、大屏适配(scale 方案)

数据可视化

折线/柱状/饼图/仪表盘/地图

Vue3

组件化、响应式(Proxy 登场)、生态

WebSocket

实时数据推送

收官

智慧工厂大屏项目(简历核心项目)

阶段2 开始前建议:

  • 用 1-2 天复习毕业项目,确保能"不看笔记"重写核心模块

  • 整理博客目录,挑选 3-5 篇打磨成"代表作"

  • 保持每天 2 小时节奏,学习惯性比爆发力重要


🎓 阶段1 毕业! 从 2026 年夏天那个"什么是变量"的起点,到今天能独立搭出分层架构的实时监控台——32 周,你做到了。阶段2,智慧工厂大屏见!🚀

评论