Usando IIFE para criar membros privados em JavaScript

Demonstra como usar o IIFE para criar membros privados em JS.
Você provavelmente não o usará para criar getter e setter, como no meu exemplo.
É apenas para fins de demonstração. <br/>
IIFE === Expressão de função chamada imediatamente

var Dog = (function() {
var name = "defaut name";

var DogInner = function() {
this.getName = function() {
return name;
};

this.setName = function(value) {
name
= value;
};
};

return DogInner;
})(); // this does the trick

var dog = new Dog();
dog
.name = "Frankenweenie"; // has no effect on the name in Dog object
console
.log(dog.getName()); // logs: defaut name
dog
.setName("Frankenweenie");
console
.log(dog.getName()); // logs: Frankenweenie