【发布时间】:2016-11-12 20:26:36
【问题描述】:
如果我:
console.log(global.module);
在文件 foo.js 中执行它:
node foo.js
它输出未定义。但是,如果我在启动 Node REPL 时访问全局对象上的相同属性,它就是一个对象。 get 的实际对象作为参数传递给模块包装函数 module。
为什么它不在全局对象的文件中,但在 REPL 中?
【问题讨论】:
标签: javascript node.js
如果我:
console.log(global.module);
在文件 foo.js 中执行它:
node foo.js
它输出未定义。但是,如果我在启动 Node REPL 时访问全局对象上的相同属性,它就是一个对象。 get 的实际对象作为参数传递给模块包装函数 module。
为什么它不在全局对象的文件中,但在 REPL 中?
【问题讨论】:
标签: javascript node.js
在模块文件的上下文中,module 不是全局变量,它实际上是一个局部变量。 Node 模块代码在执行之前实际上是这样包装的:
(function (exports, require, module, __filename, __dirname) {
所有这些变量对于每个模块都必须是唯一的,因此它们不能是全局变量。
然而,在 REPL 和其他在全局范围内评估的代码中,这些变量被添加为全局对象的属性,因此您仍然可以使用 require 之类的东西。
【讨论】: