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

时间:2014-11-15 04:17:18

标签: javascript node.js emscripten

遇到node中的奇怪行为。我有一个emscripten编译的程序,我想用作库。 emscripten使用变量Module来控制运行时行为,并在下面生成./lib/g.js之类的代码。在浏览器中,Moduleindex.js中定义的全局到var中的本地./lib/g.js正确别名。但是,在node中,似乎并非如此。构造:var Module = Module || {};消灭了我的全局Module

index.js

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

./lib/g.js

console.log ( 'Module: ', Module );

var Module = Module || {};

node index.js的输出:

Module:  undefined

我假设在g.js中,Module仅在本地范围内被提升和解除引用,屏蔽了全局版本(在global.Module中)。任何人都可以提出解决方案吗?

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

2 个答案:

答案 0 :(得分:0)

  

有人可以建议解决方法吗?

只需删除var关键字。

答案 1 :(得分:0)

您可以查看使用rewire

var rewire = require("rewire");
var g = rewire("./lib/g");
g.__set__("Module", {name: "Module"});