在模块中全局创建时,有人能告诉我,放置了哪些上下文功能?
我尝试通过反射访问函数。简化方法如下所示。
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");
找不到他们。
我已经意识到,最佳做法是使用自定义命名空间。 但出于好奇心,我想知道:引用的函数在哪里?
谢谢!
答案 0 :(得分:1)
Node.js与浏览器略有不同。 Node.js默认具有模块,每个文件都是一个模块。在您的示例中,文件中定义的所有内容都是该模块的私有内容。因此,您不需要Node.js中的命名空间,因为它们是通过模块系统隐式提供的。
在Node.js模块中,您有以下范围:
默认私有范围
这里是使用var
或函数语句在函数外部定义的所有内容。这就是所谓的背景。
全球范围
如果您定义没有var
的内容或将其分配给global
对象上的属性。此外,所有内置类型,如Array,Object等都在这里。
导出范围
使用module.exports =
或exports.foo =
定义的所有内容都适用于此范围。这是模块的用户可以从外部访问的内容。公共部分。最初,模块中的this
变量绑定到module.exports