Node.js模块中的上下文 - 如何使用反射访问函数?

时间:2014-04-17 07:55:32

标签: javascript node.js module

在模块中全局创建时,有人能告诉我,放置了哪些上下文功能?

我尝试通过反射访问函数。简化方法如下所示。

leaf.js:

function GlobalLeafFn(){
  console.log("2");
}

console.log("Fn in Leaf via this" + this["GlobalLeafFn"]);
console.log("Fn in Leaf via global" + global["GlobalLeafFn"]);

直接使用节点leaf.js 执行时,可以找到该函数。

但是当用

将模块包含在另一个脚本中时
require("./leaf.js");

找不到他们。

我已经意识到,最佳做法是使用自定义命名空间。 但出于好奇心,我想知道:引用的函数在哪里?

谢谢!

1 个答案:

答案 0 :(得分:1)

Node.js与浏览器略有不同。 Node.js默认具有模块,每个文件都是一个模块。在您的示例中,文件中定义的所有内容都是该模块的私有内容。因此,您不需要Node.js中的命名空间,因为它们是通过模块系统隐式提供的。

在Node.js模块中,您有以下范围:

默认私有范围

这里是使用var或函数语句在函数外部定义的所有内容。这就是所谓的背景。

全球范围

如果您定义没有var的内容或将其分配给global对象上的属性。此外,所有内置类型,如Array,Object等都在这里。

导出范围

使用module.exports =exports.foo =定义的所有内容都适用于此范围。这是模块的用户可以从外部访问的内容。公共部分。最初,模块中的this变量绑定到module.exports