1

好的,假设我有一个在“显示模块模式”中设置的网络应用程序(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,每个模块中都声明了一个相同的变量 ( )。这似乎是多余的,但是在另一个变量中引用该变量会使一个模块依赖于另一个模块。所以你不妨把它们结合起来。我看到的第三个选项是将共享变量创建为全局变量,这有点违背了拥有模块的目的。

因此,基于这三个选项,我会说在每个模块中单独定义变量将是最好的选择。

这个对吗?

4

1 回答 1

1

这里没有万能的答案。所有方法都有好处。

在您的特定示例中,似乎 modOne 和 modTwo 都使用 DOM 元素做一些事情(具有显示/隐藏子节点的方法)。这两个模块都与它们处理的 DOM 元素密切相关,这意味着您不能重用该模块来处理其他元素。当您这样考虑时,很明显它们作用的元素(模块作用的数据)应该由外部源提供,因此将全局变量传递给每个模块似乎更好。更好的是传递模块所需数据的数据服务模块。

继续走这条路,你会看到一个简单的表演/隐藏者如何变成一个可怕的多层架构,如果没有对整个系统有透彻的了解,这种架构太复杂而无法解决。

考虑到这一点,答案是你应该选择任何能让你的代码更清晰的东西。复杂的应用需要复杂的解决方案,简单的应用应该得到简单的解决方案。

于 2013-10-18T15:40:11.560 回答