Я бы сказал:
1) цель этой техники - не загрязнять глобальное пространство имен. Это хорошая вещь.
В приведенном ниже примере вы можете видеть, что все ваше взаимодействие с библиотекой происходит через один объект MyLibrary. Открытый API - это возвращаемое значение анонимной функции.
var MyLibrary = function() {
// private
this.InternalVariable = 'some value';
function internalFunction(x,y) {
return x + y;
}
function getInternalVariable() {
return this.InternalVariable;
}
// public
return {
publicVariable : '1.0',
publicFunction : function(x,y) {
return x + y
},
accessInternalVariable : function() {
return getInternalVariable();
}
}
}();
2) см. Также пример выше о том, как разместить ваши «внутренние» функции
3) если ваша глобальная переменная является каким-то параметром конфигурации, я бы просто сделал public setter / getter и оставил бы переменную "private"