Hora de demistificar:
Primero, estemos de acuerdo en que en javascript, podés declarar una función sin nombre.
function() { console.log('asd'); }
Podés, si querés, asignarla a una variable e invocar esa función luego
var myFunction = function() { console.log('asd'); }
myFunction();
Pero también, en el mundo libre de javascript, podés hacer cosas locas, como declarar una función sin nombre, e invocarla inmediatamente, esto es exactamente igual que el ejemplo anterior (sin el console.log) pero en una línea:
function(){}()
Lamentablemente, ese código no corre, por ciertas cuestions de sintaxis de javascript, para que corra tenés dos opciones:
(function(){})() //envolver la declaración de la función entre paréntesis
!function(){}() //anteponer un signo de exclamación
Ahora...
Por qué querrías declarar una función y llamarla inmediatamente? Por qué no poner el código así nomás en un script de html total se va a invocar de una.
Por una cuestión de prolijidad. Cuando definís una variable fuera de cualquier función, es visible globalmente. Cualquier otra parte del código puede acceder a esa variable. Y eso puede hacer que tu código sea poco robusto.
Pero, oh magia, cuando ponés variables dentro de funciones, esas variables solo se pueden acceder dentro de esas funciones. Y eso nos ayuda a modularizar el código.