Для контроля того, сколько и что вы выставляете в глобальном пространстве имен, принято выставлять то, что вам нужно, через один глобальный объект, обычно заглавными буквами.
FOO.module1.init();
FOO.module2.init();
Вы бы сделали это, убедившись, что FOO существует, а если нет: создайте его.
var FOO = this.FOO || {};
То же самое для пространств имен вашего модуля:
FOO.module1 = FOO.module1 || {};
и затем внутри анонимной функции выставьте то, что вы хотите.
Полный пример
module1.js:
var FOO = this.FOO || {};
FOO.module1 = FOO.module1 || {};
(function ($) {
var my, local, data;
function init() {
// use my, local and data here.
}
FOO.module1.init = init;
}(jQuery));
module2.js:
var FOO = this.FOO || {};
FOO.module2 = FOO.module2 || {};
(function ($) {
var some, other, data;
function init() {
// use some, other and data here.
}
FOO.module2.init = init;
}(jQuery));
controller.js:
FOO.module1.init();
FOO.module2.init();