【问题标题】:Is it better to re-declare variable in module or reference separate module?在模块中重新声明变量还是引用单独的模块更好?
【发布时间】:2013-10-18 15:04:48
【问题描述】:

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

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

这对吗?

【问题讨论】:

  • 只需在自己的模块中创建showFoos函数,并在modOnemodTwo函数中继承shoFoosshowFoos 函数定义旁边有一个语法错误。在showFoos 之后应该有一个= 符号。
  • 我想我宁愿让模块与特定元素分离。

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


【解决方案1】:

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

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

继续沿着这条路走下去,您会看到一个简单的表演/隐藏者如何变成一个可怕的多层架构,如果不彻底了解整个系统,就无法解决该架构。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 2018-02-02
    • 2021-11-08
    • 2014-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多