我可以在Marionette模块的第二个定义中访问该模块的私有变量吗



Marionette允许您将模块的定义拆分到不同的文件中。

是否可以从模块的第二部分访问模块一部分中定义的私有变量或函数?例如:

//in module1.js
App.module("MyModule", function(MyModule, App, Backbone...){
    myPrivateVar = 0;
}
//in module2.js
App.module("MyModule", function(MyModule, App, Backbone...){
    var myPrivateFunction = function(){
        if (myPrivateVar>0){
            //do something
        }
    }
}

您不能。这并不是Marionette特有的。

javascript中的变量是函数范围的。换句话说,在函数内声明的任何变量都只能在该函数内使用。

定义伪私有变量(实际上是公共变量)的一个常见约定是在名称前面加一个下划线:

//in module1.js
App.module("MyModule", function(MyModule, App, Backbone...){
    MyModule._myPrivateVar = 0;
});
//in module2.js
App.module("MyModule", function(MyModule, App, Backbone...){
    var myPrivateVar = MyModule._myPrivateVar;
    var myPrivateFunction = function(){
        if (myPrivateVar>0){
            //do something
        }
    }
});

不从模块外部访问以_为前缀的变量的勤勉程度取决于您。您还应该注意模块的加载顺序:为了定义_myPrivateVar,需要在module2.js之前加载module1.js。

最新更新