【问题标题】:Is Node global a cross-module object?Node 全局是跨模块对象吗?
【发布时间】:2018-09-08 19:02:00
【问题描述】:

根据 Node documentation,顶级作用域不是全局作用域,在 Node.js 模块中定义的变量将是该模块的本地变量。
但是,我注意到在全局范围内创建的var something 被列为global 的属性,对我来说这似乎是一种跨模块对象。 这是我在 GitBash 中运行的代码:

$ node
var something = "this is a test"
undefined
something
'this is a test'
console.log(global)

我真的不明白这与文档中关于顶级范围的说明如何一致。

如果 global 真的是一个跨模块对象,正如 Ebohlman 对 this old question 的回答似乎暗示的那样,那么 var something 不是它所定义的模块的本地对象。

有人可以帮我解释一下这个问题吗? var something 真的是模块范围的吗? global 与 JavaScript 中的 window 有何不同?它的目的是什么?

【问题讨论】:

  • module 的顶级范围不是全局范围,是的。你在哪里放置和运行你的var something
  • @Bergi 感谢您回复我。我用 GitBash 运行它。
  • 你的意思是你运行node启动节点REPL然后输入var something
  • @Bergi 正是如此。我编辑了我的问题,添加了我运行的代码的 sn-p。
  • 看看this。您阅读的文档不准确,它们应声明“顶级范围模块(脚本文件)不是全局范围”。另见nodejs.org/api/repl.htmlnodejs.org/api/modules.html

标签: javascript node.js


【解决方案1】:

你在一个 REPL 中运行了代码,这意味着你在运行node 之后输入的所有代码都在同一个范围内,这与声明和运行多个模块不同,所以你没有重现错误我们可以在这里提供帮助。

【讨论】:

  • 很抱歉问了一个可能很愚蠢的问题。我可以知道为什么在 Visual Studio 中从终端运行相同的几行会返回不同的结果吗?在这种情况下,var something 不会被列为 global 的属性。
  • 不确定 - 你的问题是关于模块的,你试图通过从命令行运行 Node.js 来重现错误,这是两个不同的东西。如果最终您想测试两个 Node.js 模块之间的全局范围泄漏,为什么不编写两个非常简单的模块并以这种方式进行测试?
猜你喜欢
  • 2019-08-26
  • 2016-10-20
  • 2012-07-01
  • 2017-06-02
  • 1970-01-01
  • 2012-02-20
  • 1970-01-01
  • 2011-06-18
  • 2014-02-18
相关资源
最近更新 更多