【发布时间】:2014-02-05 13:17:49
【问题描述】:
你可能知道 Node.js 中的global object:
{Object} 全局命名空间对象。
在浏览器中,顶级范围 是全局范围。这意味着如果您在浏览器中 global scope var something 将定义一个全局变量。在节点这个 是不同的。顶级范围不是全局范围;变量 Node 模块中的某些内容将是该模块的本地内容。
现在我偶然发现了 root 对象,该对象似乎无处记录。
虽然看起来我可以像global一样使用root:
test1.js
foo = 'bar'; // foo is defined in the global scope (no var in front of foo)
test2.js
require('./test1.js');
console.log(root.foo);
在外壳中:
$ node test2.js
bar
当我在 shell 中检查 global 和 root 时,它们看起来是一样的。试试:
$ node
> global
...
> root
...
所以看来root 和global 是一样的。但为什么会出现冗余?为什么root 没有记录?是否已弃用?
【问题讨论】:
-
节点;
root === global; // true -
true的结果只是告诉我们,两个名称都引用同一个“对象引用”。 -
@Lego 但引用相等比深度相等更强大...
-
您可能不知道,ECMAscripts 对象在某种程度上是在黑洞中创建的(有些人也将其称为 HEAP)。即使你像
var myobj = { };一样,你也只会收到一个 reference 到 ECMA 空间中新创建的对象,而不是“对象本身”。只是为了澄清。
标签: javascript node.js global