如何从JavaScript中的模块导出变量?

时间:2015-05-06 09:06:44

标签: javascript node.js variables module

根据这个post我们知道变量可以从JavaScript中的一个模块导出:

// module.js
(function(handler) {
  var MSG = {};

  handler.init = init;
  handler.MSG = MSG;

  function init() {
    // do initialization on MSG here
    MSG = ...
  }
})(module.exports);
// app.js
require('controller');
require('module').init();
// controller.js
net = require('module');

console.log(net.MSG); // output: empty object {}

以上代码位于Node.js,我的empty object中有一个controller.js。你能帮我找出原因吗?

UPDATE1

我已更新上述代码:

// module.js
(function(handler) {
  // MSG is local global variable, it can be used other functions
  var MSG = {};

  handler.init = init;
  handler.MSG = MSG;

  function init(config) {
    // do initialization on MSG through config here
    MSG = new NEWOBJ(config);
    console.log('init is invoking...');
  }
})(module.exports);

// app.js
require('./module').init();
require('./controller');

// controller.js
net = require('./module');
net.init();
console.log(net.MSG); // output: still empty object {}

输出:仍为空对象。为什么呢?

1 个答案:

答案 0 :(得分:1)

当您在controller.js中console.log(net.MSG)时,您尚未调用init()。这只会在app.js中出现。

如果你在controller.js中init()它应该可以工作。

我通过测试发现的另一个问题。

当您在MSG = {t: 12};init()时,使用新对象覆盖MSG,但这不会影响handler.MSG的引用。您需要直接设置handler.MSG,或修改 MSGMSG.t = 12;