【ES6】week11-summary

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

第 11 周总结:let/const 与解构赋值 — ES6 起航

蜗牛往上爬 · 前端工业可视化学习笔记 第 11 周总结
本周正式进入 ES6 标准学习。let/const 解决了 var 多年的痛点(作用域污染、变量提升陷阱、重复声明),解构赋值让取值代码更优雅。从本周起,我们的代码将全面"现代化"。


目录


一、本周学了什么

天数

主题

核心知识点

产出

Day 1-2

let/const

块级作用域、TDZ、不允许重复声明、const 内容可改、for 闭包陷阱

重构设备管理系统

Day 3-4

数组解构

按位置、交换变量、跳过、嵌套、默认值、rest

解析 API 数组

Day 5-6

对象解构

按属性名、重命名、默认值、嵌套、参数解构、for…of 解构

提取大屏字段

知识图谱

let/const 与解构赋值
├── let
│   ├── 块级作用域({} 内有效)
│   ├── TDZ(声明前访问报错)
│   └── 不允许重复声明
│
├── const
│   ├── 声明必须赋值、不可重新赋值
│   ├── 对象/数组内容可以修改(锁地址不锁内容)
│   └── 命名约定:常量用全大写(MAX_TEMP)
│
├── 对比 var
│   ├── var:函数作用域、提升、可重复声明、进 window
│   ├── let/const:块级、TDZ、不可重复、不进 window
│   └── 使用原则:默认 const,要赋值用 let,不用 var
│
├── 数组解构
│   ├── 按位置:let [a, b] = arr
│   ├── 交换:[a, b] = [b, a]
│   ├── 跳过:逗号占位
│   ├── 默认值:右边 undefined 时使用
│   └── rest:...rest 收集剩余
│
├── 对象解构
│   ├── 按属性名(顺序无所谓)
│   ├── 重命名:{ a: x }
│   ├── 默认值、嵌套
│   └── 参数解构:fn({name, temp})
│
└── 综合应用
    ├── for...of + 解构遍历对象数组
    ├── rest 参数替代 arguments(真数组)
    └── 从 API 对象一次性提取字段(重命名+嵌套+默认值)

二、核心知识速记

三条铁律

  1. 默认 const,需要重新赋值用 let,基本不用 var

  2. const 锁地址不锁内容——对象属性、数组元素可以改

  3. 解构原则:数组按位置、对象按属性名

关键对比表

对比项

var

let

const

块级作用域

TDZ

无(undefined)

有(报错)

有(报错)

重复声明

重新赋值

进 window

高频写法

// 交换变量
[a, b] = [b, a];

// 函数参数解构 + 默认值
function fn({ id, name = "未知" } = {}) {}

// rest 参数求和
const sum = (...nums) => nums.reduce((a, b) => a + b, 0);

// for...of 解构遍历
for (const { id, temp } of deviceList) {}

在工业可视化里的应用场景

知识点

应用场景

const 声明设备数据

设备列表(数组)用 const,push 修改内容

let 循环变量

遍历设备、批量绑定事件(避免闭包陷阱)

数组解构

解析固定顺序的 API 返回(如 [id, name, temp])

交换变量

冒泡排序、数据排序交换

对象解构

从设备详情对象提取大屏字段

参数解构

组件配置对象、渲染函数的 options 参数

for…of 解构

遍历设备数组直接取字段


三、本周踩过的坑

坑点 1:const 对象内容被"以为"不能改

// ❌ 以为 const 就不能改,导致数据操作卡住
const device = { temp: 65 };
device = { temp: 85 };  // ❌ 报错(换地址)

// ✅ const 允许改内容
const device = { temp: 65 };
device.temp = 85;  // ✅ 可以

坑点 2:已声明变量解构忘加括号

// ❌ 开头 { 被当作代码块,语法错误
let x;
{ x } = { x: 1 };  // ❌ SyntaxError

// ✅ 整体加括号
let x;
({ x } = { x: 1 });

坑点 3:解构 null/undefined

// ❌ 解构 null 直接报错,页面崩溃
const data = getData();  // 可能返回 null
const { id } = data;     // ❌ TypeError

// ✅ 先判空或用默认值
const { id } = data || {};
// 或者调用处保证 data 不是 null

坑点 4:对象解构用了数组的"位置"思维

// ❌ 以为对象解构按位置
const obj = { id: "A", name: "B" };
const { id, name } = obj;  // ✅ 但这是按属性名,不是位置

// ❌ 顺序写反也不行吗?——不,顺序无所谓,名字对就行
const { name, id } = obj;  // ✅ 一样能取到

坑点 5:var 的 for 闭包陷阱还在用

// ❌ 用 var,批量绑定事件全是最后一个
for (var i = 0; i < btns.length; i++) {
  btns[i].onclick = function () { console.log(i); };  // 全是 length
}

// ✅ 用 let,每个按钮独立
for (let i = 0; i < btns.length; i++) {
  btns[i].onclick = function () { console.log(i); };  // 0,1,2...
}

四、自测清单

  • [ ] let 和 var 的 3 个区别?

  • [ ] 什么是 TDZ?访问会发生什么?

  • [ ] const 声明必须做什么?能重新赋值吗?

  • [ ] const 对象/数组的内容能改吗?为什么?

  • [ ] for + var 的闭包陷阱是什么?let 如何解决?

  • [ ] 数组解构的默认值什么时候生效?

  • [ ] rest 参数和 arguments 有什么区别?

  • [ ] 对象解构和数组解构的匹配规则分别是什么?

  • [ ] 对象解构如何重命名?如何加默认值?

  • [ ] 函数参数解构的标准写法?

  • [ ] 已声明变量做对象解构为什么要加括号?

  • [ ] 解构 null 会发生什么?

  • [ ] 用解构交换两个变量的值?


五、下周预告

第 12 周:函数扩展(箭头函数)与字符串/数组扩展

天数

主题

Day 1-2

箭头函数(=>)、this 绑定、默认参数

Day 3-4

字符串扩展(模板字符串、includes/startsWith/endsWith、padStart)

Day 5-6

数组扩展(展开运算符、Array.from/of、find/findIndex/includes)

下周的箭头函数是 ES6 的精髓——代码会从 function (d) { return d.temp } 变成 d => d.temp,简洁不止一倍。展开运算符 ... 也是高频语法。


🚀 第 11 周完成!ES6 的大门已开,下周开始用箭头函数和扩展运算符写"现代 JS"。

评论