这行javascript是什么意思

What does this line of javascript mean?

本文关键字:意思 是什么 javascript 这行      更新时间:2023-09-26

我刚打开Retina.js,希望能学到一些东西,但我在第一行就被难住了。

var root = (typeof exports === 'undefined' ? window : exports);

这条线到底是干什么的?

再往下,

 function Retina() {}
 root.Retina = Retina;

Retina属性是如何在没有首先定义的情况下从根开始设置的?

typeof是一个运算符,当用于根本没有定义的变量时,它仍然会产生值'undefined'。因此表达式:

(typeof exports === 'undefined' ? window : exports)

检查exports是否不在作用域中。如果不是,它会产生window(浏览器中的全局对象),如果是,它会导致exports(从[某种]模块导出东西的标准名称——请参阅CommonJS、AMD和RequireJS之间的关系?)。然后将结果分配给root

如果你想知道条件运算符

var d = a ? b : c;

或多或少相当于

var d;
if (a) {
    d = b;
} else {
    d = c;
}

至于root.Retina = Retina;,就像JavaScript中的所有其他属性一样,不需要声明它,也没有声明它的功能

如果导出类型等于"undefined",则我们将其设置为window。否则,我们将其设置为导出。

它是三元的,你可以这样做:

if(typeof(exports) === 'undefined') 
root = window;
else 
root = exports
var root = (typeof exports === 'undefined' ? window : exports);

此行检查exports是否不是undefined。在Node.js环境中,exports特殊变量是指当前模块。因此,如果没有定义exports,那么您将处于浏览器或Node.js环境中。

因此,如果您在浏览器中,root将引用window对象,否则为当前模块对象(exports)。root.RetinaRetina函数分配给窗口或当前模块。