工厂函数参数作为可编辑私有变量:修改参数是否为不良实践?
工厂函数中修改参数作为私有变量的实践分析
一、你的第一种实现是可行的,且不属于不良实践
你提供的代码(修正语法错误后)完全可行,利用闭包特性实现了私有状态的封装:
- 工厂函数的参数
name和age处于函数作用域内,外部无法直接访问 - 返回的
editAge、editName作为闭包,能够持续访问并修改这两个参数,实现了「只能通过指定方法修改内部状态」的封装需求
修正语法错误后的代码:
factory (name, age) { const editAge = (newAge) => { age = newAge; } const editName = (newName) => { name = newName; } return { editAge, editName } }
二、两种返回方式的核心区别
1. 仅返回修改方法(第一种)
- 严格实现了私有状态:外部完全无法直接读取或篡改
name、age,只能通过你提供的方法操作,适合需要严格封装、避免外部随意干预内部状态的场景。
2. 返回状态+修改方法(第二种)
- 状态完全公开:外部可以直接读取
obj.name、obj.age,甚至直接赋值修改(比如obj.name = "张三"),这就失去了「私有变量」的意义,变成了公开属性。适合不需要封装、允许外部直接访问状态的简单场景。
三、优化建议(可选)
如果想让代码可读性更强,明确区分私有状态和函数参数,可以把参数赋值给内部变量,用下划线前缀约定私有标识:
factory (name, age) { let _name = name; let _age = age; const editAge = (newAge) => { _age = newAge; } const editName = (newName) => { _name = newName; } return { editAge, editName } }
内容的提问来源于stack exchange,提问作者Sandeep
相关产品推荐
相关产品推荐

