когда срабатывают круглые скобки в самом конце (module || {}), то в переменную module записывается ссылака на создаваемый объект, то есть анонимную функцию.
В момент первого вызова свойству module еще не присвоена ссылка, так как объект-функция находится в процессе создания. Поэтому в аргументы передается пустой объект {}, ведь происходит сравнивание "module или {}". Но модуля ещё нет и по этому передается объект.
TrainHard: сказать честно, я такую конструкцию много раз видел в коде, который был написан очень давно, без использования "правильных библиотек", по этому не знаю для чего так делать. Но возможно так делают, чтобы изобразить синглтон или приватность...
Ничего хитрого здесь нет, суть проста - либо берем существующий объект-модуль и работаем с ним в функции, либо если его нет- создаем. Это такая старая реализация модульности...
//module = [undefined] значит создаем новый с пустого объекта
var module = (function (obj) {
obj.x=1;
obj.z=3;
return obj;
})(module || {});
//module = [object] продолжаем работать с уже созданным
var module = (function (obj) {
obj.x=2;
obj.y=1;
return obj;
})(module || {});
console.dir(module);