Explicar la sintaxis de la función anónima encapsulada.

Resumen

¿Puede explicar el razonamiento detrás de la sintaxis para funciones anónimas encapsuladas en JavaScript? ¿Por qué funciona esto?(function(){})(); pero esto no lo hacefunction(){}();?

Lo que yo sé

En JavaScript, uno crea una función nombrada como esta:

function twoPlusTwo(){
    alert(2 + 2);
}
twoPlusTwo();

También puede crear una función anónima y asignarla a una variable:

var twoPlusTwo = function(){
    alert(2 + 2);
};
twoPlusTwo();

Puede encapsular un bloque de código creando una función anónima, luego envolviéndola entre corchetes y ejecutándola inmediatamente:

(function(){
    alert(2 + 2);
})();

Esto es útil cuando se crean scripts modularizados, para evitar saturar el alcance actual, o el alcance global, con variables potencialmente conflictivas, como en el caso de los scripts de Greasemonkey, los complementos de jQuery, etc.

Ahora, entiendo por qué esto funciona. Los corchetes encierran el contenido y exponen solo el resultado (estoy seguro de que hay una mejor manera de describirlo), como con(2 + 2) === 4.

Lo que no entiendo

Pero no entiendo por qué esto no funciona igual de bien:

function(){
    alert(2 + 2);
}();

¿Me puedes explicar eso?

Respuestas a la pregunta(10)

Su respuesta a la pregunta