首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这一行javascript是什么意思?

这一行javascript是什么意思?
EN

Stack Overflow用户
提问于 2014-04-28 14:51:44
回答 3查看 389关注 0票数 1

我刚刚打开了Retina.js,希望能学到一些东西,但我对第一行感到困惑。

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

这条线到底是做什么的?

再往下走,

代码语言:javascript
复制
 function Retina() {}

 root.Retina = Retina;

Retina属性是如何在不首先定义根的情况下从根中设置的?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-28 14:55:00

typeof是一个运算符,当对一个根本没有定义的变量使用时,它仍然会导致值'undefined'。所以这句话:

代码语言:javascript
复制
(typeof exports === 'undefined' ? window : exports)

检查exports是否不在作用域。如果不是,它会导致window (浏览器中的全局对象),如果是的话,就会产生exports (从某种模块导出东西的标准名称-参见Relation between CommonJS, AMD and RequireJS?)。然后将结果分配给root

如果你想知道条件运算符的事,

代码语言:javascript
复制
var d = a ? b : c;

多少相当于

代码语言:javascript
复制
var d;

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

至于root.Retina = Retina;,就像JavaScript中的所有其他属性一样,没有必要声明它,也没有任何工具来声明它。

票数 2
EN

Stack Overflow用户

发布于 2014-04-28 14:53:24

如果导出类型等于“未定义”,则将其设置为“窗口”。否则,我们将其设置为出口。

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

代码语言:javascript
复制
if(typeof(exports) === 'undefined') 
root = window;
else 
root = exports
票数 0
EN

Stack Overflow用户

发布于 2014-04-28 14:54:43

代码语言:javascript
复制
var root = (typeof exports === 'undefined' ? window : exports);

这一行检查exports是否不是undefined。在Node.js环境中,exports特殊变量是指当前模块。因此,如果未定义exports,则在浏览器(否则为Node.js环境)中。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23344266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档