闭包可构建可复用交互行为:封装动作逻辑与上下文状态,实现自带记忆、彼此隔离、多实例共存;通过工厂函数注入目标生成命令对象,解耦行为与接收者;支持组合多维行为及运行时动态配置与缓存。

用闭包构建可复用的交互行为模式,核心是把“动作逻辑”和“上下文状态”一起封进函数作用域,让每次生成的行为实例自带记忆、彼此隔离、无需类也能多实例共存。
封装带快照的命令对象
每个用户操作(如修改输入框、拖动节点)都应生成一个闭包命令,它在创建时就捕获接收者当前状态,执行与还原逻辑共享同一份快照:
- 调用工厂函数时传入目标元素或数据源,例如 createTextCommand(input)
- 闭包内部立即读取并保存 prevValue = input.value 或 snapshot = {...state}
- 返回的对象含 execute()(改状态)和 undo()(恢复快照),两者都能安全访问私有变量
- 不同输入框调用同一工厂,得到的命令互不影响——这是复用的基础
解耦接收者与行为逻辑
闭包不硬编码 DOM 查询或业务路径,而是靠参数注入绑定具体目标,使同一套行为能适配多种场景:
- 按钮点击、快捷键、API 调用均可触发 command.execute(),无需重复写
el.value = ... - 切换主题、调整字号、排序列表等操作,都可用 createThemeCommand(theme) 或 createSortCommand(items) 统一组织
- UI 层只负责触发,行为逻辑由闭包承载,结构与控制彻底分离
组合多维行为形成复合交互
复杂操作常由多个子行为叠加而成,每个子行为用独立闭包封装,再聚合调度:
- 写 createDragHandler(el) 管理位置变化,createSnapController(grid) 处理吸附逻辑
- 主交互函数按需调用它们的 update() 方法,各自维护自己的坐标、偏移量、校验规则
- 某部分临时禁用(比如暂停缩放但保留拖拽),只需跳过对应闭包调用,不干扰整体流程
支持运行时动态配置与缓存
闭包天然维持对初始参数的引用,适合做轻量级配置中心和结果复用:
- 样式生成器中,colorScheme('dark') 和 sizeLevel('lg') 各自闭包返回纯配置对象,相同输入可缓存输出
- 动画控制器里,createBouncingBall(x, y, vy) 每次返回独立 update 函数,帧间状态(速度、时间差)自动延续
- 无需深比较或全局状态管理,靠作用域隔离实现高效响应











