好的,所以假设我有一个在“显示模块模式”中设置的Web应用程序(Javascript),我有两个使用完全相同数据的模块。
示例:
(让我们假装这两个函数有一个原因在于单独的模块。毕竟这只是一个例子)
var modOne = (function () {
var foos = document.getElementsByClassName("foo");
var hideFoos function () {
var i;
for (i=0; i < foos.length ; i++) {
foos[i].style.visibility = "hidden";
}
}
return {
hideFoos: hideFoos
};
})();
var modTwo = (function () {
var foos = document.getElementsByClassName("foo");
var showFoos function () {
var i;
for (i=0; i < foos.length ; i++) {
foos[i].style.visibility = "visible";
}
}
return {
showFoos: showFoos
};
})();
正如您所看到的,在每个模块中声明了一个相同的变量(var foos
)。这似乎是多余的,但引用另一个变量中的变量会使一个模块依赖于另一个。所以你不妨把它们结合起来。我看到的第三个选项是将共享变量创建为全局变量,这样做会破坏模块的目的。
因此,基于这三个选项,我会说在每个模块中单独定义变量将是最佳选择。
这是对的吗?
答案 0 :(得分:1)
这里没有一个适合所有人的答案。所有方法都有好处。
在您的特定示例中,似乎modOne和modTwo都使用DOM元素执行某些操作(具有显示/隐藏子节点的方法)。这两个模块都与它们所处理的DOM元素非常相关,这意味着您无法重用该模块来处理其他元素。当你以这种方式思考它时,很明显它们所作用的元素(模块所作用的数据)应该由外部源提供,因此具有传递给每个模块的全局变量似乎更好。可能更好的是传递模块所需数据的数据服务模块。
继续沿着这条道路,您可以看到一个简单的节目/隐藏者如何变成一个复杂的多层体系结构,如果不彻底了解整个系统,就太复杂了。
考虑到这一点,答案是你应该采取任何使你的代码更清晰的方法。复杂的应用需要复杂的解决方案,简单的应用应该得到简单的解决方案。