java - 函数应该以最小范围声明吗?

标签 java javascript oop constructor global-variables

根据我的经验,大多数 JS 函数、构造函数或模块模式函数都被声明为全局变量或绑定(bind)到全局命名空间对象。在任何情况下,这些标识符都是全局可访问的。

从您系统中的任何代码行,您都可以:

mod1 = somepackage.SomeModule(); // couple to me!

这是一个简单的 JS 示例,但这个想法在其他语言中也适用。

function A () { // couple to me!
  return { foo: "bar" };
};

(function () {
  function B () { // don't couple to me!
    function c () { // really don't couple to me!
      return "buzz";
    };
    return { fizz: c() }; // 0 scope lookup
  };
  var a = A(); // 1 scope lookup
  var b = B(); // 0 scope lookup
})();

var a1 = A(); // 0 scope lookup
var b1 = B(); // B is not defined

既然全局被认为是有害的,函数/类的可见性应该限制到什么程度?权衡是什么?

我的问题在某种程度上是出于以下原因: ' when are globals acceptable ', ' alternatives to globals ' 和 ' return of the globals '

谢谢!

最佳答案

嗯,最好从最小范围开始,如果有要求,您可以增加范围。但是,如果您一开始就将事情公开,那么将很难(几乎不可能)最小化范围,因为您必须在此过程中重构/修复其他代码。

这是设计 API 时的主要事情之一。

同时保持范围最小也是一个很好的设计决策。这样您就可以管理类的使用。例如,在工厂模式的情况下,您将构造函数的范围保持为默认值,以便只有该特定包中的代码(即您的工厂类实现)可以创建对象,而其他人不能。

关于java - 函数应该以最小范围声明吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3737613/

相关文章:

java - 为什么在Android Studio的Profiler(内存)中,FinalizerReference类的保留堆大小如此之大?

java - 我使用 Singleton 和 Realm Database 是否正确?

javascript - 如何从返回的复杂响应中获取 url?

oop - UML 组合属性不是类中的特征?

java - 如何获取所有 Jenkins 项目类型的列表

java - 检查 Firebase 数据库中存在的所有节点中的特定值

javascript - 防止Ajax触发jQuery脚本

javascript - Node.js eventEmitter 中 addListener 和 On 的区别

python - 如果我到处都在处理字典,我应该把它们设为 "classes"吗?

javascript - 如何在局部变量中包含 javascript 内容或在本地提供命名空间