Javascript 提升局部变量屏蔽全局变量?

Javascript 提升局部变量屏蔽全局变量?,javascript,node.js,emscripten,Javascript,Node.js,Emscripten,在节点中遇到奇怪的行为。我有一个编译过的程序,我想用作库emscripten使用变量Module控制运行时行为,并生成如下代码/lib/g.js。在浏览器中,模块从index.js中定义的全局变量到/lib/g.js中的本地变量进行了正确的别名。但是,在节点中,情况似乎并非如此。构造:var Module=Module |{}清除我的全局模块 index.js: global.Module = { name: 'Module' }; var g = require ( './lib/g.js'

节点中遇到奇怪的行为。我有一个编译过的程序,我想用作库
emscripten
使用变量
Module
控制运行时行为,并生成如下代码
/lib/g.js
。在浏览器中,
模块
index.js
中定义的全局变量到
/lib/g.js
中的本地变量
进行了正确的别名。但是,在节点中,情况似乎并非如此。构造:
var Module=Module |{}清除我的全局
模块

index.js

global.Module = { name: 'Module' };
var g = require ( './lib/g.js' );
console.log ( 'Module: ', Module );

var Module = Module || {};
Module: undefined
/lib/g.js

global.Module = { name: 'Module' };
var g = require ( './lib/g.js' );
console.log ( 'Module: ', Module );

var Module = Module || {};
Module: undefined
节点index.js的输出

global.Module = { name: 'Module' };
var g = require ( './lib/g.js' );
console.log ( 'Module: ', Module );

var Module = Module || {};
Module: undefined 模块:未定义 我假设在
g.js
中,
Module
仅在本地范围内提升和取消引用,屏蔽了全局版本(在
global.Module
中)。有人能提出一个工作建议吗

通过编辑
emscripten
生成的代码以使用
var Module=global.Module |{}
,可以解决此问题。虽然这是一种可能的解决方法,但我不希望编辑由
emscripten
生成的代码

有人能提出一个工作建议吗


只需删除
var
关键字。

您可以看看如何使用


如果在更高的作用域中定义了一个
模块
,那么
var Module=Module | |{}
将在这个作用域中为它创建一个别名。访问
Module
上的属性可以很好地访问作用域更高的变量的属性。@jfriend00:这是预期的行为,但在给出的示例中不是这样。可以在浏览器中正常工作,但不能在
节点中正常工作。未找到涵盖此情况的
节点的变量作用域规则。看起来emscripten确实希望其输出脚本在全局范围内运行,而不是在模块范围内运行。如果不想编辑代码,可以尝试全局评估。在我看来,emscripten正在使用的全局
模块
与节点使用的全局
模块
之间存在冲突。也许他们都在试图定义/使用同一个问题,或者其中一个正在重新定义并覆盖另一个问题。为了清晰起见,编辑了该问题。我试图避免的是编辑由
emscripten
生成的代码。更改生成的代码并不总是一个好主意。将直接询问
emscripten
社区。