骨干库代码模式我无法理解

nit*_*rma 6 javascript backbone.js

我是中级javascript开发人员,试图了解javascript开发人员如何编写他们的代码,我决定开始寻找Backbone库作为起点.

这里有一些用于骨干初始设置的代码片段,请帮助我理解它.

code1 -

(function(){
   var root = this;
}).call(this);
Run Code Online (Sandbox Code Playgroud)

是否有任何特定的理由使用调用方法而不是简单地使用(),或者它只是一个编码首选项,如果我必须编写相同的代码,我会做这样的事情.

(function(root){

})(this);
Run Code Online (Sandbox Code Playgroud)

代码2 -

  var Backbone;
  if (typeof exports !== 'undefined') {
    Backbone = exports;
  } else {
    Backbone = root.Backbone = {};
  }
Run Code Online (Sandbox Code Playgroud)

现在在全局范围内没有导出的定义,也没有在本地范围内的任何地方定义那么如果我正在编写相同的代码,那么if是什么

  var Backbone = root.Backbone = {};
Run Code Online (Sandbox Code Playgroud)

代码3

var _ = root._;
if (!_ && (typeof require !== 'undefined')) _ = require('underscore')._;
Run Code Online (Sandbox Code Playgroud)

再次,我无法在本地或全球范围内找到需求的定义

Jon*_*ves 6

代码块1

这取决于开发人员的偏好,您可以用任何一种方式编写代码,实际上,许多库确实更喜欢您建议的样式.

代码块2

这个块是对AMD Boiler Plate的一种看法.AMD库提供了将JavaScript代码拆分为模块所需的钩子.在代码块的情况下,该exports对象是CommonJS模块标准使用的全局对象.如果exports全局不存在则将Backbone root直接添加到对象.

有趣的是,Backbone不支持导出到流行的RequireJS AMD库这一事实.

代码块3

require 是AMD库引入的另一个全球,见上文.