在两个JavaScript模块之间传递变量不起作用

时间:2013-05-03 22:55:42

标签: javascript module

我在同一namespace内有两个模块,我想在它们之间传递一个变量。命名空间名为app,变量为a - 但由于某些原因,我的变量a在我的方法被调用时总是出现null

以下是代码:

// module 1
(function() {
    app.module1 = (function() {
        var a = null; 
        canvas.addEventListener('mousedown', function(e) {
            a = { message: hallo };
            app.module2.print();
        }, 0);

        return {
            a: a
        };
    })();
})();

// module 2

(function() {
    app.module2 = (function() {
        var print = function() {
            console.log(app.module1.a);
        }

        return {
            print: print
        };
    })();
})();

2 个答案:

答案 0 :(得分:1)

这是因为您的处理程序引用了模块上的本地a而不是a属性。我建议你修改对象,或者你可以这样做:

// module 1
(function () {
  app.module1 = (function () {
    var interface = {
      a: null
    };
    canvas.addEventListener('mousedown', function (e) {
      //this way, you are modifying the object
      interface.a = {
        message: hallo
      };
      app.module2.print();
    }, 0);
    return interface;
  })();
})();

答案 1 :(得分:1)

选中此jsbin

基本上你可以做的是每次计算变量:

在你的模块1中:

a: function(){return a;}

无论您在哪里使用:

console.log(app.module1.a());