这段代码有什么作用?
g = "undefined" !== typeof exports ? exports : k.Backbone = {};
答案 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}浏览器的全局范围。