变量命名与类或ID同名是否为不良编程实践?原因是什么?
变量命名与类/ID同名是否属于不良编程实践?
嘿,这个问题问得挺接地气的——其实变量命名和类/ID同名算不算不良实践,不能一概而论,得看具体场景和你要规避的风险。先拿你给的示例代码来说:
var slideshowSlides = document.getElementsByClassName("slideshowSlides");
这种把变量名和类名完全对齐的写法,很多开发者都在用,直观性拉满,一眼就能看出这个变量存的是对应类的元素集合,其实没啥毛病。但如果不注意一些细节,它确实可能变成坑,下面给你拆解下:
可能踩坑的情况
- 全局作用域下的冲突风险:如果在全局作用域定义这类变量,很容易和其他脚本、甚至浏览器的隐式全局变量撞车。比如旧版IE会自动把页面里的ID作为全局变量挂载,要是你有个ID叫
slideshowSlides,同时又定义了同名全局变量,就会出现覆盖或被覆盖的诡异bug。就算是现代浏览器,多个脚本共用全局作用域时,同名变量也会引发冲突。 - 语义模糊的隐患:如果后续你修改了变量的用途,比如把它改成存储单个激活的元素:
var slideshowSlides = document.querySelector(".slideshowSlides.active");,这时候变量名和类名一致,但实际内容从“元素集合”变成了“单个元素”,就会让其他看代码的人(包括未来的你)产生误解,增加维护成本。 - 团队协作的规范冲突:如果你的团队有统一的命名规范,比如要求元素类的变量加前缀(比如
el_或者$)来区分普通变量,那违背规范的同名写法就会降低代码的一致性,拖慢团队协作的效率。
适合用的场景
如果满足下面这些条件,同名写法反而很合适:
- 变量的用途非常明确,就是存储对应类/ID的元素(集合或单个),没有后续变更用途的计划;
- 变量处于局部作用域(比如函数内部、模块内部),不会和全局或其他作用域的变量冲突;
- 团队没有明确禁止这种命名方式,大家都认可这种直观的命名逻辑。
总的来说,这不算绝对的不良编程实践,核心是要平衡可读性、冲突风险和团队规范。只要能保证代码清晰、不会引发意外冲突,这种命名方式完全可以放心用。
内容的提问来源于stack exchange,提问作者DaveJones




