我刚刚打开了Retina.js,希望能学到一些东西,但我对第一行感到困惑。
var root = (typeof exports === 'undefined' ? window : exports);
这条线到底是做什么的?
再往下走,
function Retina() {}
root.Retina = Retina;Retina属性是如何在不首先定义根的情况下从根中设置的?
发布于 2014-04-28 14:55:00
typeof是一个运算符,当对一个根本没有定义的变量使用时,它仍然会导致值'undefined'。所以这句话:
(typeof exports === 'undefined' ? window : exports)检查exports是否不在作用域。如果不是,它会导致window (浏览器中的全局对象),如果是的话,就会产生exports (从某种模块导出东西的标准名称-参见Relation between CommonJS, AMD and RequireJS?)。然后将结果分配给root。
如果你想知道条件运算符的事,
var d = a ? b : c;多少相当于
var d;
if (a) {
d = b;
} else {
d = c;
}至于root.Retina = Retina;,就像JavaScript中的所有其他属性一样,没有必要声明它,也没有任何工具来声明它。
发布于 2014-04-28 14:53:24
如果导出类型等于“未定义”,则将其设置为“窗口”。否则,我们将其设置为出口。
它是三元的,你可以这样做:
if(typeof(exports) === 'undefined')
root = window;
else
root = exports发布于 2014-04-28 14:54:43
var root = (typeof exports === 'undefined' ? window : exports);这一行检查exports是否不是undefined。在Node.js环境中,exports特殊变量是指当前模块。因此,如果未定义exports,则在浏览器(否则为Node.js环境)中。
因此,如果您在浏览器中,root将引用window对象,否则,引用当前模块对象(exports)。root.Retina将Retina函数分配给窗口或当前模块。
https://stackoverflow.com/questions/23344266
复制相似问题