Javascript 如何动态访问节点中的全局变量?

Javascript 如何动态访问节点中的全局变量?,javascript,node.js,global-variables,Javascript,Node.js,Global Variables,在基于浏览器的JavaScript中,您可以执行以下操作: var foo = "foo"; (function() { var foo = "bar"; console.log(foo); // => "bar" console.log(window["foo"]); // => "foo" })(); 在缺少窗口对象的Node中有没有类似的方法?如果您想要一种环境无关的方法,例如,在编写代码以在browser和Node.js上工作时

在基于浏览器的JavaScript中,您可以执行以下操作:

var foo = "foo";

(function() {
    var foo = "bar";

    console.log(foo);
    // => "bar"

    console.log(window["foo"]);
    // => "foo"
})();

在缺少
窗口
对象的Node中有没有类似的方法?

如果您想要一种环境无关的方法,例如,在编写代码以在browser和Node.js上工作时,您可以在JavaScript文件顶部执行类似的操作:

var globalObject = typeof global === "undefined" ? this : global;
然后使用
globalObject
,类似于您将使用的方式


请注意,必须声明一个不带
var
的变量,才能使其成为Node.js中
全局
对象的一部分。

您可以使用nodejs中的
全局
关键字访问全局变量

注意:-
nodejs
中有一条规则,只有那些变量将是未使用
var
声明的全局变量

如果你有像贝娄一样的声明

foo = "sample"; //this you can access using global
但是

第二个不在全局范围内,它是该模块的局部

在浏览器中,顶级作用域是全局作用域。也就是说 在浏览器中,如果您在全局范围var中,则会定义 全局变量。在节点中,这是不同的。顶级作用域不可用 全球范围;var节点模块中的某些内容将是本地的 那个模块


您可以创建一个名为Globals的函数,并将变量分配给Globals.fooThis,这对设计来说是件坏事。不要使用与要询问的更高级别作用域变量同名的局部变量。只要选择原始名称,你就不会有这个问题。Node.js中的全局上下文是什么/在哪里?@FelixKling,不管你是在处理浏览器还是Node.js,当然,但是典型的Node.js应用程序都被划分为模块。你是说在一个模块中,
这个
指的是全局对象吗?那么你错了。在模块内部,
指的是
导出
。REPL不是模块。创建一个模块,记录
this===global
require
它。仅在“主脚本”中
此===global
(例如,如果运行
节点main.js
)。模块不在全局上下文中。你的答案是正确的,我只是担心不是每个人都知道Node.js应用程序中的全局上下文是什么。
var foo = "sample"; //this you cann't access using global.