函数表达式通过封装逻辑、接收外部数据参数、结合闭包管理状态、作为策略算法及延迟执行,实现数据与逻辑分离。

函数表达式本身不直接实现数据与逻辑分离,但它能成为这种分离的关键载体——关键在于“把逻辑封装进函数,而让函数接收外部传入的数据”,从而避免硬编码、提升复用性。
用函数表达式封装可复用逻辑
将画廊切换、表单校验、列表渲染等行为抽象为独立的函数表达式,不依赖页面内联数据,只通过参数接收。这样逻辑就脱离了具体数据源,变成“待命状态”。
- 函数内部不写死图片路径或校验规则,而是把它们作为参数传入
- 函数体只关注“怎么处理”,不关心“处理什么”
- 例如:const renderGallery = (images, container) => { ... },images 和 container 都是运行时注入
配合闭包管理私有状态
当需要维护内部状态(如当前图片索引、已验证字段集合)又不想暴露全局变量时,函数表达式结合闭包是自然选择。数据被包裹在作用域内,逻辑仍对外保持简洁接口。
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- 初始化时传入初始数据,返回一个带方法的对象
- 状态变化仅通过公开方法触发,外部无法直接修改
- 例如:const createValidator = (rules) => ({ validate: (field) => ..., reset: () => ... })
作为策略模式中的可替换算法
在表单验证、排序、格式化等场景中,不同规则对应不同函数表达式。主逻辑根据配置动态选用,实现“算法即数据”。数据决定用哪个函数,函数只管执行。
立即学习“Java免费学习笔记(深入)”;
- 每种校验规则写成独立函数:const isEmail = val => /@/.test(val)
- 配置项里声明规则名,运行时查表调用对应函数
- 新增规则只需加函数,无需改主流程
与 HTML 数据解耦的关键时机
函数表达式要真正起效,必须等页面数据就绪后再调用。常见做法是在 DOM 加载后,从 <script> 标签或 data-* 属性中读取配置,再传给函数执行。</script>
- 确保定义数据的 <script> 在引入逻辑脚本之前</script>
- 避免在函数内部用 document.querySelector 硬查,改为由调用方传入节点引用
- 例如:renderGallery(window.galleryData, document.getElementById('gallery'))

















