在模块或引用单独模块中重新声明变量是否更好?

时间:2013-10-18 15:04:49

标签: javascript module-pattern revealing-module-pattern

好的,所以假设我有一个在“显示模块模式”中设置的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)。这似乎是多余的,但引用另一个变量中的变量会使一个模块依赖于另一个。所以你不妨把它们结合起来。我看到的第三个选项是将共享变量创建为全局变量,这样做会破坏模块的目的。

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

这是对的吗?

1 个答案:

答案 0 :(得分:1)

这里没有一个适合所有人的答案。所有方法都有好处。

在您的特定示例中,似乎modOne和modTwo都使用DOM元素执行某些操作(具有显示/隐藏子节点的方法)。这两个模块都与它们所处理的DOM元素非常相关,这意味着您无法重用该模块来处理其他元素。当你以这种方式思考它时,很明显它们所作用的元素(模块所作用的数据)应该由外部源提供,因此具有传递给每个模块的全局变量似乎更好。可能更好的是传递模块所需数据的数据服务模块。

继续沿着这条道路,您可以看到一个简单的节目/隐藏者如何变成一个复杂的多层体系结构,如果不彻底了解整个系统,就太复杂了。

考虑到这一点,答案是你应该采取任何使你的代码更清晰的方法。复杂的应用需要复杂的解决方案,简单的应用应该得到简单的解决方案。