编程实践——使用helper方法隐藏对象

Programming practices - using helper method to hide object

我正在阅读 closure library 的代码段,我在那里看到了这个代码段:

/**
 * Gets the document object being used by the dom library.
 * @return {!Document} Document object.
 */
goog.dom.getDocument = function() {
  return document;
};

为什么我们将文档引用包装在 getter 方法中?文档不是全局对象吗?

我看到两个合乎逻辑的原因,都涉及闭包编译器:

  1. 类型检查 - 当调用这个函数时,闭包编译器会知道 return 类型是 Document 类型并且它永远不会为空。据推测 Google Closure 开发人员可以将其硬编码到 Closure 编译器中,但是通过明确说明,他们避免为全局对象上存在的属性向 Closure 编译器添加特殊情况。

  2. 缩小 - 当函数经过 ADVANCED_OPTIMIZATIONS 时,goog.dom.getDocument 可以缩小到 a.b.c 之类的东西。 Closure Compiler 无法重命名 document 因为它无法控制全局对象上的变量名,但它肯定可以重命名 reference document 的函数给你较小的源代码。