Рассмотрим:Объявление Namespaces
var MyApp = MyApp || {};
MyApp.doAlert = function(message) { alert(message); };
MyApp.doAlert("from MyApp");
и
(function(ns) {
ns.doAlert = function(message) {
alert(message);
};
})(window.MyApp2 = window.MyApp2 || {});
MyApp2.doAlert("from MyApp2");
Они оба работают, и, насколько я могу судить, по сути то же самое. Цель состоит в том, чтобы объявить пространство имен.
Есть ли преимущество одного стиля над другим?
В вашем простом примере: Нет. Читайте на [закрытиях] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures), они очень полезны/необходимы время от времени. Также [IIFE] (http://en.wikipedia.org/wiki/Immediately-invoked_function_expression) – Xotic750