骨干源代码中的Javascript语法

时间:2013-01-08 11:41:52

标签: javascript backbone.js

这段代码有什么作用?

g = "undefined" !== typeof exports ? exports : k.Backbone = {};

2 个答案:

答案 0 :(得分:3)

这是简写:

if("undefined" !== typeof exports)
    g = exports;
}else{
    g = k.Backbone = {};
}

:?被称为Ternary Operator

如果我用这种方式写它可能会更具可读性:

g = ("undefined" !== typeof exports) // If
    ? exports                        // Then
    : k.Backbone = {};               // Else

答案 1 :(得分:2)

它将Backbone定义为CommonJS模块,因此可以在兼容CommonJS的环境中加载,例如node.js.

您正在查看缩小的源代码。这就是它的样子unminified

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

变量exports是CommonJS模块定义的返回对象。在CommonJS环境中,Backbone变量设置为该值,因此从模块导出Backbone

如果exports未定义,则假定代码位于浏览器环境中,Backbone应在root对象上导出属性,该属性引用{{1}浏览器的全局范围。