第 37 章 工具函数
7 分钟阅读
第 37 章 工具函数
所谓"工具函数",就是那些可以反复使用的、封装好的函数。它们就像程序员工具箱里的"瑞士军刀",让你写代码更高效、更优雅。
37.1 防抖与节流
debounce:事件触发 n 毫秒后执行,n 毫秒内再次触发重新计时
防抖就像"等公交车"——每次有人上车(触发),司机就重新等一会儿。如果一直有人上车,司机就一直在等,直到没人上车了才发车。
| |
throttle:n 毫秒内只执行一次,多次回触发只执行第一次
节流就像"射击"——扣一次扳机只能发射一颗子弹,即使你一直扣着不放,子弹也会按固定间隔发射。
| |
防抖 vs 节流对比与适用场景
| 场景 | 工具 | 说明 |
|---|---|---|
| 搜索框输入 | 防抖 | 用户停止输入后才搜索 |
| 窗口大小改变 | 节流 | 每隔一段时间检查一次 |
| 按钮点击 | 节流 | 防止重复提交 |
| 滚动加载 | 节流 | 滚动时每隔一定距离加载 |
| 表单验证 | 防抖 | 用户停止输入后验证 |
| |
下一节,我们来学习深拷贝与浅拷贝!
37.2 深拷贝与浅拷贝
JSON.parse(JSON.stringify())
| |
递归深拷贝
| |
structuredClone(ES2021+)
| |
下一节,我们来学习数组操作!
37.3 数组操作
扁平化:flat / reduce / 正则
| |
去重:Set / indexOf / filter / includes / reduce
| |
洗牌:Fisher-Yates 算法
| |
交集 / 并集 / 差集
| |
分组:groupBy
| |
下一节,我们来学习字符串与数值!
37.4 字符串与数值
UUID:crypto.randomUUID()(ES2022+)
| |
千分位:toLocaleString() / Intl.NumberFormat / 正则
| |
URL 参数:URLSearchParams
| |
Base64:btoa / atob(含中文处理)
| |
下一节,我们来学习发布订阅!
37.5 发布订阅
EventEmitter:on / off / emit / once
| |
Promise 队列:控制并发
| |
本章小结
本章我们学习了一些实用的工具函数:
- 防抖与节流:控制函数执行频率,防止频繁触发。
- 深拷贝与浅拷贝:复制对象,JSON 方法、递归方法、structuredClone。
- 数组操作:扁平化、去重、洗牌、交集、并集、差集、分组。
- 字符串与数值:UUID、千分位格式化、URL 参数、Base64 编码。
- 发布订阅:EventEmitter 实现事件系统,Promise 队列控制并发。
这些工具函数在日常开发中非常实用。学会它们,你的代码会更加优雅、高效。
本章小结
从第28章到第37章,我们学习了 JavaScript 的进阶主题:
- 事件基础:事件绑定、事件对象、事件流、事件委托。
- 事件类型:鼠标事件、键盘事件、表单事件、资源事件、自定义事件、跨文档通信。
- 网络请求:XMLHttpRequest、Fetch API、JSON。
- 客户端存储:Cookie、Web Storage、IndexedDB。
- Proxy 与 Reflect:代理器、拦截对象操作。
- Symbol:独一无二的值、内置 Symbol。
- 正则表达式:字符类、量词、分组、字符串方法。
- 错误处理:try…catch、Error 对象、异步错误处理。
- 调试:console、断点调试、DevTools。
- 工具函数:防抖节流、深拷贝、数组操作、发布订阅。
JavaScript 的核心知识到这里就告一段落了!你已经掌握了 JavaScript 的基础知识、进阶主题和实用工具。继续深入学习吧!前端的世界还有很多精彩等着你!