esa porcion crea una funcion literal o anonima e la invoca inmediatamente. al final, no existe trazo de dicha funcion porque dicha funcion literal no es almacenada en una variable o propiedad. es decir,
Código:
// funcion anonima;
function(){
// otros codigo;
}
si queremos invocar dicha funcion, tenemos que incluir los pares de parentesis al final
Código:
function(){
// otros codigo;
}()
sin embargo, javascript indicara error de sintaxis porque entiende que no se ha formado correctamente la expresion. por esa razon, si la funcion no se va almacenar en una variable, se encierra la funcion literal dentro de un par de parentesis.
Código:
(function(){
// otros codigo;
})()
el parentesis retiene temporeramente el valor devuelto por dicha expresion que envuelve, en este caso la funcion literal. tienes que pensarlo como en la algebra: primero resolvemos los problemas dentro de parentesis y al final ese parentesis devuelve un solo valor. aqui es lo mismo, javascript primero interpreta la funcion antes de invocarla y al final devuelve una funcion. no confundas el ultimo par de parentesis, este ultimo significa invocacion porque le sigue a una funcion.