我试图向同事描述我的代码是如何构建的,我正在寻找他实施的反模式的名称(它违反的软件原则的奖励积分)。我正在使用JS进行演示,但这不是JS特定的。
function x() {
var a, b, c;
var doWork = function(){
a = 1;
b = 2;
addAB();
return c;
};
var addAB = function(){
c = a + b;
};
var result = doWork();
}
他使用父作用域将信息传入和传出函数/方法。它使得理解代码变得非常困难。
答案 0 :(得分:1)
我不知道它的正式名称,但是,您所描述的问题是创建具有副作用的函数。
您不希望任何修改其自身范围之外的任何函数。拥有可被任何其他函数修改的共享成员(在本例中为a, b, & c
)可能会导致未知和/或不一致的状态和/或行为。
答案 1 :(得分:-1)
我相信您的问题并不适用于JavaScript(以及许多其他编程语言)。您的代码和您的团队成员正在使用closures:
闭包是指独立(自由)变量的函数 (在本地使用但在封闭范围内定义的变量)。 换句话说,这些功能记得'其中的环境 他们被创造了。
在JavaScript和许多其他可以创建闭包的语言中,访问父作用域的引用非常常见,它为代码提供了更多的强大功能,而不是痛苦。显然,错误使用的工具会产生疼痛,但我应该分析你的伙伴'代码,以确保它不是你只是反对闭包。
总之,闭包不是反模式。他们是一种语言功能。
例如,您的代码可能是DOM事件处理等实际用例:
var text = "";
document.getElementById("someButton").addEventListener(function() {
text = document.getElementById("someInput").value;
});
一些开发人员在构造函数中实现了类似私有函数的东西:
function A() {
this.text = "";
var that = this;
function fillText() {
that.text = "hello world";
}
fillText();
}
var a = new A();
console.log(a.text); // "hello world"