0
  // Save a reference to the global object (`window` in the browser, `exports`
  // on the server).
  var root = this;

什么是出口?我可以理解将 root.Backbone 设置为对象文字,因为现在可以向它添加属性。

但是,上面源代码中的注释暗示this指向浏览器中的窗口和服务器上的导出?

这是真的?

我问的原因是因为这里的代码:

  var Backbone;
  if (typeof exports !== 'undefined') {
    Backbone = exports;
  } else {
    Backbone = root.Backbone = {};
  }

你为什么要定义命名空间之外的所有模块(导出),违背了包含库的闭包的目的。

4

1 回答 1

2

exportsCommonJS模块格式的导出对象的名称,主要由node.js使用。

在 CommonJS 中,每个 javascript 源文件都是一个模块,您分配的任何内容都exports将是该文件的“返回值”。所以 Backbone 源代码中的行:

Backbone = exports;

说:“将 Backbone 定义为这个模块的导出对象。” 稍后,当它们将属性附加Backbone.ModelBackbone根对象时,它们会附加到导出值。

于 2013-01-29T20:15:00.927 回答